Docker Compose:当“父”完成时停止“depends_on”服务

gol*_*das 6 docker dockerfile docker-compose

depends_on在父服务测试完成后不使用,是否可以告诉 docker compose 终止阵列上指定的服务--abort-on-container-exit?

我正在尝试构建一个从多个应用程序运行测试的 docker 文件,例如:

services:
  test-spa:
    build:
      context: ./spa
      dockerfile: Dockerfile.test
    command: ["yarn", "run", "test", "--watch", "false"]
  lint:
    build:
      context: ./spa
      dockerfile: Dockerfile.test
    command: ["yarn", "run", "lint"]
  build:
    build:
      context: ./spa
      dockerfile: Dockerfile.test
    command: ["yarn", "run", "build", "--prod"]
  test-backend:
    build:
      context: ./backend
      dockerfile: Dockerfile.dev
    entrypoint: [scripts/entrypoint.sh]
    command: bundle exec rails test
    depends_on:
      - db
  db:
    image: postgres
Run Code Online (Sandbox Code Playgroud)

问题是作为依赖项test-backend启动db服务,运行其测试,退出并db永远不会完成。

使用--abort-on-container-exit不是一种选择,因为spa相关服务可能会在test-backend结束之前退出。

BMi*_*tch 4

我不相信这是 docker-compose 的内置功能。但您可以轻松编写解决方案,例如:

docker-compose up -d db
docker-compose up test-backend
docker-compose down db
Run Code Online (Sandbox Code Playgroud)

在 docker-compose 之外,还有一个docker container wait命令可以让您挂起直到容器退出。您可以使用标签或其他唯一值上的 和 过滤器查找容器名称docker container ls,也可以依赖 compose ( $project_$service_$replica) 中的可预测容器名称。该docker container wait命令允许您以分离状态启动整个项目,然后等待一个容器退出,然后再继续停止它,例如:

docker-compose up -d
docker container wait $(basename $(pwd))_test-backend_1
docker-compose down db
Run Code Online (Sandbox Code Playgroud)