Docker-composeサービスを使用してコンテナを起動しようとしていますが、残念ながらコンテナはコード0で終了しました。コンテナは、.tar.gzアーカイブからのリポジトリのおかげで構築されます。このアーカイブはCentos VMです。
同じアーカイブから6つのコンテナを作成したい。 dockerコマンドを6回入力する代わりに、コマンドとタグを要約できるdocker-compose.ymlファイルを作成したいと思います。
1つのコンテナーを作成するためだけにdocker-compose.ymlファイルを書き始めました。
これが私のdocker-compose.ymlです:
version: '2'
services:
dvpt:
image: compose:test.1
container_name: cubop1
command: mkdir /root/essai/
tty: true
コマンドを指定するだけなので、コマンドには注意を払わないでください。
だから私の質問は、コンテナが終了する理由?これらのコンテナを同時に構築する別のソリューションはありますか?
ご回答ありがとうございます。
答えは実際には最初のコメントです。ミゲルのコメントを少し説明します。
まず、Dockerコンテナーが単一のコマンドを実行することを理解する必要があります。開始されたコマンドが実行されているプロセスが実行されている限り、コンテナは実行されます。プロセスが完了して終了すると、コンテナは停止します。
その理解があれば、私たちはあなたのケースで何が起こっているのかを推測できます。 dvpt
サービスを開始すると、コマンドmkdir /root/essai/
が実行されます。そのコマンドは、フォルダーを作成して終了します。この時点で、プロセスが終了したためDockerコンテナーが停止します(ステータス0で、mkdir
はエラーなしで完了しました)。
Tail -f/dev/nullのようなコマンドで終了できます
私のdocker-compose.ymlでしばしば動作します
command: tail -f /dev/null
そして、コンテナを実行し続ける方法を簡単に確認できます。
docker ps
1つの解決策は、終了しないプロセス、無限ループ、またはバックグラウンドで継続的に実行できる何かを作成することです。これにより、プロセスが終了しないため、コンテナーが開いたままになります。
しかし、これは非常にハックです。私はまだより良い解決策を探しています。
Zend Serverイメージはこのようなことをします。 .shスクリプトには、最終コマンドがあります。
exec /usr/local/bin/nothing
バックグラウンドで継続的に実行されるファイルを実行します。ここでファイルの内容をコピーしようとしましたが、バイナリでなければなりません。
編集:/bin/bash
でファイルを終了することもできます。これは、コンテナで新しい端末プロセスを開始し、閉じないようにします。