在另一个容器退出后运行docker容器

时间:2018-07-03 10:39:01

标签: docker docker-compose

我有以下docker-compose文件

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

我想在serviceA容器退出后运行serviceB容器。 有什么方法可以等待serviceA退出然后运行容器serviceB?

2 个答案:

答案 0 :(得分:1)

Docker Compose不支持此功能。

服务B或多或少地standard trick等待服务A开始启动。如果一个服务可以查看另一个服务(例如,服务A正在运行在私有Docker网络上可见的网络服务),则服务B可以等待A启动,然后等待B停止,然后再工作。不过,您将看不到A是否成功退出。

如果您愿意在主机上为服务B提供潜在的不受限制的根访问权限,则可以将Docker套接字安装到其容器中,然后它可以监视服务A退出。正确一些启动A的协调器服务C,看到它退出,然后启动B,可能会更干净。

(如果您使用的是Kubernetes,它有一个pre-stop hook,可以在服务A退出前运行脚本A,但这是一个非常沉重的答案。)

答案 1 :(得分:1)

您可能会在第二个容器上配置一个脚本来对第一个容器执行ping操作,就像https://docs.docker.com/compose/startup-order/一样,但是请检查容器是否关闭而不是打开。

但是,从经验来看,这很容易出错。我更喜欢运行docker-compose两次。假设命令执行后第一个容器退出,则可以在没有守护程序标志serviceA的情况下运行-d,然后运行serviceB

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

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