有没有连续运行Docker容器的中间件?

有没有连续运行Docker容器的中间件?,docker,Docker,例如,当Docker容器A、B和C彼此具有不同的运行时时,我希望依次运行它们 A -> (wait A done) -> B -> (wait B done) -> C 有没有中间产品可以实现这一点?或者我可以用docker compose这样做吗?以“docker方式”做事一切都应该被视为它自己的独立微服务,因为docker/docker compose没有任何内置的功能。Compose将始终按顺序启动依赖项,但它不会等待它们完成启动,因此它不能执行诸如在启动web服

例如,当Docker容器A、B和C彼此具有不同的运行时时,我希望依次运行它们

A -> (wait A done) -> B -> (wait B done) -> C
有没有中间产品可以实现这一点?或者我可以用docker compose这样做吗?

以“docker方式”做事一切都应该被视为它自己的独立微服务,因为docker/docker compose没有任何内置的功能。Compose将始终按顺序启动依赖项,但它不会等待它们完成启动,因此它不能执行诸如在启动web服务器之前等待数据库服务器启动之类的操作

此处提供了大量有关此主题的信息:

我在下面提供了一个简短的总结:

如果依赖项容器是网络服务

允许您在运行命令之前等待端口可访问(例如从)

如果不是网络服务或“完成”状态比仅访问端口更复杂

或者,您需要实现一个包装器脚本,在启动当前容器服务之前确认服务可用(取自)

version: "2"
services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
  db:
    image: postgres
#!/bin/bash
# wait-for-postgres.sh

set -e

host="$1"
shift
cmd="$@"

until psql -h "$host" -U "postgres" -c '\l'; do
  >&2 echo "Postgres is unavailable - sleeping"
  sleep 1
done

>&2 echo "Postgres is up - executing command"
exec $cmd