この質問は、Dockerのリポジトリに関する問題から生じています。
https://github.com/docker/compose/issues/942
Docker composeを使用してデータコンテナー(プロセスを実行しない)を作成する方法がわかりません。
正確にどのように行うかは、データ専用コンテナーに使用しているイメージに少し依存します。画像にentrypoint
がある場合、docker-compose.yml
でこれを上書きする必要があります。たとえば、これは、Dockerハブからの公式MySqlイメージのソリューションです。
DatabaseData:
image: mysql:5.6.25
entrypoint: /bin/bash
DatabaseServer:
image: mysql:5.6.25
volumes_from:
- DatabaseData
environment:
MYSQL_ROOT_PASSWORD: blabla
これに対してdocker-compose up
を実行すると、..._DatabaseData_1
を呼び出すときにExited
のステータスを示すdocker ps -a
のようなコンテナを取得します。 docker inspect
でさらに調査すると、0
のタイムスタンプがあることがわかります。これは、コンテナが実行されなかったことを意味します。 docker composeの所有者が述べているように here 。
これで、docker-compose rm -v
を実行しない限り、データのみのコンテナー(..._DatabaseData_1
)はデータを失いません。したがって、docker-compose stop
およびdocker-compose up
を好きなだけ実行できます。
tianon/true
のような専用のデータ専用イメージを使用する場合、これは同じように機能します。ここでは、entrypoint
が存在しないため、上書きする必要はありません。その画像とdocker composeに問題があるようです。試していませんが、問題が発生した場合は この記事 を読む価値があります。
一般に、アクセスするコンテナに使用しているデータ専用コンテナに同じイメージを使用することをお勧めします。詳細については、 Data-only container madness をご覧ください。
データ専用コンテナー(DOC)は、ボリュームプロバイダーとしてのみ機能するように作成されたコンテナーです。コンテナ自体には、他のコンテナがvolumes_from
ディレクティブを使用してボリュームをマウントできること以外の機能はありません。
DOCは、ボリュームを作成するために1回だけ実行する必要があります。他のコンテナは、停止している場合でも、その中のボリュームを参照できます。
OPの質問:docker-compose.yml
は、docker-compose up
を実行するたびにDOCを開始します。OPはコンテナーとボリュームのみを作成し、実行しないオプションを要求します。何らかのcreate_only: true
オプションを使用します。
OPの質問からの問題で言及したように:
docker-compose.yml
で指定されたものと同じ名前でデータコンテナを作成し、docker-compose up --no-recreate
を実行します(docker-compose.yml
で指定されたものは再作成されません)。tail -f /dev/null