任何中间件连续运行Docker容器?

例如,当我拥有彼此具有不同运行时的Docker容器A,B和C时,我想先后运行它们。

A -> (wait A done) -> B -> (wait B done) -> C 

有没有中间件可以实现这一点? 或者我可以用docker-compose做这个吗?

做“Docker方式”的事情应该被视为自己独立的微服务,因为这样的docker/docker构成没有内置任何东西来做到这一点。 Compose将总是依次启动依赖项,但不会等待它们完成启动,因此它不能执行诸如在启动Web服务器之前等待数据库服务器启动的事情。

有关于此主题的丰富的信息可在这里: https : //docs.docker.com/compose/startup-order/

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

如果依赖容器是一个networking服务

等待它允许您在运行命令之前等待端口可访问( https://docs.docker.com/compose/startup-order/中的示例)

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

如果不是networking服务,或者“完成”条件比端口更为复杂,那么它就是可访问的

或者,您需要实现一个包装脚本,在启动当前容器服务之前确认服务是可用的(从https://docs.docker.com/compose/startup-order/获取 )

 #!/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