是否有任何中间件可以连续运行 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/

我在下面提供了一个简短的摘要:

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

wait-for-it 允许您在运行命令之前等待端口可访问(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

如果它不是网络服务或"完成"条件比端口只是可访问更复杂

或者,您需要在启动当前容器服务之前实现一个包装器脚本,以确认服务可用(取自 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

最新更新