LXC: コンテナ内でのアプリケーションの実行を自動化する

LXC: コンテナ内でのアプリケーションの実行を自動化する

私は、C、C++、Java、Python で送信されたプログラムの出力を自動的にコンパイル、実行、テストするプロジェクトに取り組んでいます。あらゆる種類のコードが送信できるため、これは明らかに何らかの安全な環境内で実行する必要があります。chroot jail を使用して自分でコンテナーを作成しようとしましたが、実用的ではないことが判明したため、コンテナーに目を向けました。

int iここで、 を引数として受け取り、 を返す C プログラムがあるとしますi+1。C プログラム ( としますplusone.out) をテスト入力のリスト ( ) とともにinput.txtLxC コンテナにコピーし、コンテナ内でプログラムを実行し、出力をファイル ( output.txt) に書き込み、そのファイルをホスト システムにエクスポートして、メイン アプリケーション (コンテナの外部で実行される) が結果を確認できるようにするスクリプトを記述します。リソースにもいくつかの制限が必要ですが、LxC の組み込みcgroups実装で​​それを行うことができます。

上で概説したほとんどのことは知っていますが、ホストからコンテナへ、またはその逆のファイルをコピーする方法がどうしてもわかりません。私が見たチュートリアルはすべて、コンテナを実行したりコンテナ内で動作を実演したりしていますlsecho、ホスト システムからスクリプトやプログラムをインポートすることはありません。どなたか助けていただけませんか。または、これを実現する方法を教えてくれるドキュメントを紹介していただけませんか。

答え1

これは Web サーバー上で実行されていますか?もしそうなら、ホストとコンテナが本当にロックダウンされていることを確認してください。公開されているウェブサイトの場合は、二重に確認してください(これを行うことはご存知のようですが、言及しておきます)

バイナリをコンテナファイルシステムに直接コピーする

ホストの「実行者」プログラムにルート権限があると仮定して、以下を試してください。

cp test_runner /var/lib/lxc/<container_name>/rootfs/tmp/

Rootfs はコンテナの生のファイルシステムです。次のようにしてスクリプトを実行します。

lxc-attach -n container -- /tmp/testprogram

ルートとして実行されていない場合は、権限のないコンテナを使用してみてください(セキュリティの観点からは、これが実際は良いかもしれません). その後、ルート権限を必要とせずにファイルをコンテナに直接コピーできます。Stephane Graber (Ubuntu の lxc 開発者の 1 人) は、ブログで素晴らしい紹介をしています。非特権 LXC コンテナの紹介

関連情報