sinsky
@sinsky

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

docker-composeで特定のコンテナが終了したら他のコンテナも終了させる方法

解決したいこと

docker-composeでseleniumとpythonの2つのコンテナを起動させています。
pythonでスクレイピングが終了したらseleniumのコンテナを終了させたい。

コード

docker-compose.yml
version: "3"
services:
  selenium:
    image: seleniarm/standalone-firefox:4.0.0-beta-1-20210215
    ports:
      - 4444:4444
      - 5900:5900 # VNC Port
    shm_size: '2gb'
  app:
    build: ./app # image:pythonでスクレイピングを行うコンテナ
    volumes:
      - ./app:/app
    environment:
      SELENIUM_URL: http://selenium:4444
    command: python script.py
    depends_on:
      - selenium

pythonコンテナの終了後のdocker-compose psの結果

NAME                  COMMAND                  SERVICE             STATUS              PORTS
apps_app_1        "python script.py"         app                 exited (0)          
apps_selenium_1   "/opt/bin/entry_poin…"   selenium            running             0.0.0.0:4444->4444/tcp, :::4444->4444/tcp, 0.0.0.0:5900->5900/tcp, :::5900->5900/tcp

pythonのコンテナが終了したら、seleniumコンテナも不要になるため、
pythonのコンテナ終了時あるいは、pythonコンテナの最後にコマンド等でseleniumコンテナに終了命令を出せたらと思っています。
何か良い方法があればご教授いただければと思います。

12:45 追記
docker-compose run app --rm && docker-compose down

にて動作的には満足のいく回答をいただきました。
ただこれだとdetachモードで起動できないのでログがそのまま出力されることと、
コマンド実行後、終了するまでターミナルを開いておく必要があるので、
その辺も含めプログラム上で解決できる方法があればご教授いただければ嬉しいです。

0

1Answer

端末は開きっぱなしにはなるがコンテナが1つ終了したら他も閉じるため今回には最適っぽそう

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

結果

$ docker-compose ps
       Name                   Command            State     Ports
----------------------------------------------------------------
apps_app_1        python script.py            Exit 0          
apps_selenium_1   /opt/bin/entry_point.sh   Exit 143  

0Like

Your answer might help someone💌