Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 7970

docker composeでコンテナが終了したら全コンテナ終了させる方法 - 動かざることバグの如し

$
0
0

環境

  • Docker 25
  • Docker-compose v2

やりたいこと

Docker-compose環境でAコンテナとBコンテナがあったとする。Aコンテナが何らかの理由で落ちてしまった(終了した)場合に Bコンテナも強制終了させたい。

コード

services:app:image: thr3a/stress:latest
    command: stress --vm 1 --vm-hang 0 --vm-bytes 4024M
    init:truedeploy:resources:limits:memory: 50M

  nginx:image: nginx
    depends_on:app:condition: service_completed_successfully

起動するときは必ず --abort-on-container-exitをつけなければならない。そのため -dは併用できない

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

解説

解説

この設定では、appnginxという2つのサービスが定義されている。appサービスは、メモリ制限が50Mのthr3a/stress:latestイメージを使用し、特定のコマンドを実行する。一方、nginxサービスは、nginxイメージを使用し、appサービスに依存している。

depends_onの設定により、appサービスが正常に完了するまでnginxサービスは開始されない。しかし、この設定だけでは、appサービスが何らかの理由で終了した場合、nginxサービスは自動的には終了しない。

そこで、docker compose up --abort-on-container-exitコマンドを使用する。このコマンドは、任意のサービスが終了した場合に、他のすべてのサービスを終了させる。つまり、appサービスが終了すると、nginxサービスも自動的に終了する。

ただし、このコマンドはデタッチモード(-dオプション)と併用できないため注意が必要だ。デタッチモードを使用すると、コンテナはバックグラウンドで実行され、ユーザーは他のコマンドを入力できる。しかし、--abort-on-container-exitオプションを使用すると、コンテナが終了するまでシェルはブロックされ、ユーザーは他のコマンドを入力できない。これは、--abort-on-container-exitオプションがコンテナの終了を監視し、必要に応じて他のコンテナを終了させるためだ。このため、-dオプションと併用すると、この監視機能が失われ、期待した動作が得られない可能性がある。


Viewing all articles
Browse latest Browse all 7970

Trending Articles