我有以下docker-compose文件
version: '3'
services:
serviceA:
image: my/serviceA
container_name: serviceA
serviceB:
image: my/serviceB
container_name: serviceB
我想在serviceA容器退出后运行serviceB容器。 有什么方法可以等待serviceA退出然后运行容器serviceB?
答案 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
如果有用,可以将这些命令放在脚本中。