最近まで、_docker-compose up
大量のコンテナと開始されたコンテナの1つが停止した場合、すべてのコンテナが停止しました。 https://github.com/docker/compose/issues/741 であるため、これはもはや当てはまりません。これは私たちにとって本当に迷惑です:docker-composeを使用してSeleniumテストを実行します。アプリケーションサーバー、Seleniumハブ+ノードの起動、テストドライバーの起動、テストドライバーの停止時に終了。
古い行動を取り戻す方法はありますか?
次を使用できます。
docker-compose up --abort-on-container-exit
コンテナの1つが停止すると、すべてのコンテナが停止します
提供されたリンクで提案されている回避策を試しましたか?
テストスクリプトが次のようになっていると仮定します。
$ docker-compose rm -f
$ docker-compose build
$ docker-compose up --timeout 1 --no-build
アプリケーションのテストが終了すると、composeは終了し、テストは終了します。
この場合、新しいdocker-compose
バージョン、テストコンテナを変更してデフォルトのno-opコマンド(echo、trueなど)を追加し、テストスクリプトを次のように変更します。
$ docker-compose rm -f
$ docker-compose build
$ docker-compose up --timeout 1 --no-build -d
$ docker-compose run tests test_command...
$ docker-compose stop
Runを使用すると、テスト実行から終了ステータスを取得でき、テストの出力のみが表示されます(すべての依存関係は表示されません)。
これが受け入れられない場合は、 Docker Remote API を参照して、コンテナのstop
イベントを監視し、それに対処できます。
使用例はこれです docker-gengolang
で書かれたツール コンテナ開始イベントを監視 、設定ファイルを自動的に再生成します。
Docker composeファイルで、test driverコンテナーをセットアップして、他のコンテナーに依存する(depends_on
パラメータ)。 docker composeファイルは次のようになります。
services:
application_server:
...
Selenium:
...
test_driver:
entry_point: YOUR_TEST_COMMAND
depends_on:
- application_server
- Selenium
このように依存関係を表現して、次を実行します。
docker-compose run test_driver
その他のすべてのコンテナは、test_driver
コンテナが完成しました。
このソリューションは、docker-compose up --abort-on-container-exit
回答 。後者は、(テストドライバーだけでなく)いずれかが終了した場合、他のすべてのコンテナーもシャットダウンします。どちらがより適切かは、ユースケースによって異なります。
これがあなたの問題に対する完璧な答えかどうかはわかりませんが、Dockerの maestro を使用すると、複数のDockerコンテナを単一のユニットとして管理できます。
YAMLファイルを使用してグループ化すると、親しみを感じるはずです。