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

6
我有以下的docker-compose文件:
version: '3'
services:
  serviceA:
    image: my/serviceA
    container_name: serviceA
  serviceB:
    image: my/serviceB
    container_name: serviceB

我希望在serviceA容器退出后运行serviceB容器。有没有办法等待serviceA退出,然后运行容器serviceB?
3个回答

3
您可以在第二个容器上配置一个脚本来ping第一个容器,就像这篇文档中的https://docs.docker.com/compose/startup-order/,但是检查容器是否停止而不是运行。
然而,根据经验,这种方法有点容易出错。我更喜欢两次运行docker-compose。假设第一个容器在执行命令后退出,您可以在不使用守护进程标志-d的情况下运行serviceA,然后运行serviceB
docker-compose up serviceA
docker-compose up -d serviceB

你可以将这些命令放在脚本中进行使用,如果有必要的话。

1

Docker Compose不支持此功能。

有一个更或多或少的标准技巧,可以让服务B等待服务A启动。如果一个服务有办法看到另一个服务(例如,服务A正在运行一个在私有Docker网络上可见的网络服务),那么服务B可以等待A启动,然后等待B停止,然后执行其工作。但是您将无法看到A是否成功退出。

如果您愿意在主机上为服务B提供潜在的无限制根访问权限,则可以将Docker套接字挂载到其容器中,然后它可以监视服务A的退出。编写一些编排服务C来启动A并查看它是否退出,然后启动B可能更加清晰。

(如果您在Kubernetes中,则有一个pre-stop hook可以在服务A退出之前运行脚本,但这是一个相当重量级的答案。)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接