在其他容器退出后运行docker container

mklgxw1f  于 2023-10-16  发布在  Docker
关注(0)|答案(3)|浏览(133)

我有以下docker-compose文件

version: '3'
services:
  serviceA:
    image: my/serviceA
    container_name: serviceA
  serviceB:
    image: my/serviceB
    container_name: serviceB

我想在serviceA容器退出后运行serviceB容器。有没有办法等待serviceA退出,然后运行容器serviceB?

jdgnovmf

jdgnovmf1#

您可以在第二个容器上配置一个脚本来ping第一个容器,有点像https://docs.docker.com/compose/startup-order/,但检查容器是否关闭而不是打开。
然而,从经验来看,这是一个小错误容易。我更喜欢运行两次docker-compose。假设第一个容器在命令执行后退出,您可以运行serviceA而不使用守护进程标志-d,然后运行serviceB

docker-compose up serviceA
docker-compose up -d serviceB

如果有用的话,可以将这些命令放在脚本中。

5anewei6

5anewei62#

Docker Compose不支持这个。
服务B有一个或多或少的standard trick来等待服务A启动。如果一个服务有办法看到另一个服务(例如,服务A正在运行一个在私有Docker网络上可见的网络服务),那么服务B可以等待A启动,然后等待B停止,然后完成它的工作。但是,您将无法看到A是否成功退出。
如果您愿意在主机上为服务B提供潜在的不受限制的root访问权限,则可以将Docker socket装入其容器,然后它可以监视服务A是否退出。更干净的做法可能是纠正某个协调器服务C,它启动了A,看到它退出,然后启动了B。
(If如果你在Kubernetes中,它有一个pre-stop hook,可以在服务A退出之前运行脚本,但这是一个非常重要的答案。

uqdfh47h

uqdfh47h3#

可以使用depends_on

version: '3.8'
services:
  serviceA:
    image: my/serviceA
    container_name: serviceA
  serviceB:
    image: my/serviceB
    container_name: serviceB
    depends_on:
      serviceA:
        condition: service_completed_successfully

参见:https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on

相关问题