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

kri*_*iss 7 docker docker-compose

我有以下 docker-compose 文件

version: '3'
services:
  serviceA:
    image: my/serviceA
    container_name: serviceA
  serviceB:
    image: my/serviceB
    container_name: serviceB
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*aze 1

Docker Compose 不支持这一点。

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

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

(如果你在 Kubernetes 中,它有一个预停止钩子,可以在服务 A 退出之前运行脚本,但这是一个相当重量级的答案。)