仅在前一个容器运行并停止时启动容器

问题描述 投票:0回答:1

我有一种情况,我的 docker-compose 文件中有四个容器。 第二个依赖于第一个,第三个依赖于第二个,第四个依赖于第三个。但这里有一个问题,我希望第二个只能在第一个运行、完成其进程并停止时才开始。然后第三个和第四个也一样。在第四个容器运行并完成其进程并停止后,第一个容器应该再次启动,然后循环继续。

他们是我可以使用 docker-compose 文件实现此目的的方法吗?

目前我在google上还没有找到任何解决方案。

linux docker docker-compose scripting devops
1个回答
0
投票

Compose 不支持循环运行容器。

当今的 Compose 使用 Compose 文件格式的“规范”版本,支持扩展的

depends_on:
语法,允许您按顺序运行一组作业类型容器。除此之外,并设置一个容器来等待服务类型容器运行,Compose 中没有其他可能的约束或控制流。

这意味着您需要其他方式来运行这些容器。评论者建议使用 shell 脚本,这很简单

#!/bin/sh
while true; do
  docker run --rm first-image
  docker run --rm second-image
  docker run --rm third-image
  docker run --rm fourth-image
done

将这些任务组合到单个容器中,甚至单个程序中,可能会使它们更易于运行。有时,对于作业运行者来说,将 RabbitMQ 等作业队列系统与长时间运行的工作容器结合使用会更容易、更便携;在此设置中,每个作业都可以将下一个作业排入队列,以便循环运行。

© www.soinside.com 2019 - 2024. All rights reserved.