web-dev-qa-db-ja.com

1つのコンテナーがdocker-composeで停止したときにすべてのコンテナーを停止するにはどうすればよいですか?

最近まで、_docker-compose up大量のコンテナと開始されたコンテナの1つが停止した場合、すべてのコンテナが停止しました。 https://github.com/docker/compose/issues/741 であるため、これはもはや当てはまりません。これは私たちにとって本当に迷惑です:docker-composeを使用してSeleniumテストを実行します。アプリケーションサーバー、Seleniumハブ+ノードの起動、テストドライバーの起動、テストドライバーの停止時に終了。

古い行動を取り戻す方法はありますか?

33
insitu

次を使用できます。

docker-compose up --abort-on-container-exit

コンテナの1つが停止すると、すべてのコンテナが停止します

63
Metalstorm

提供されたリンクで提案されている回避策を試しましたか?

テストスクリプトが次のようになっていると仮定します。

$ 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で書かれたツール コンテナ開始イベントを監視 、設定ファイルを自動的に再生成します。

5
Vincent De Smet

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回答 。後者は、(テストドライバーだけでなく)いずれかが終了した場合、他のすべてのコンテナーもシャットダウンします。どちらがより適切かは、ユースケースによって異なります。

5
Jakub Kukul

これがあなたの問題に対する完璧な答えかどうかはわかりませんが、Dockerの maestro を使用すると、複数のDockerコンテナを単一のユニットとして管理できます。

YAMLファイルを使用してグループ化すると、親しみを感じるはずです。

0
taco