给定的撰写文件
version: '3.8'
services:
whoami1:
image: containous/whoami
depends_on:
- whoami2
whoami2:
image: containous/whoami
部署到 Docker 群docker stack deploy -c docker-compose.yaml test
时 服务whoami1
和whoami2
似乎以随机顺序启动并忽略depends_on
条件。
docker stack deploy -c docker-compose.yaml test
Creating network test_default
Creating service test_whoami1
Creating service test_whoami2
docker swarm 是否通过依赖项支持服务启动排序?
不,至少不是内置的。
即使有depends_on,whoami2
也可能还没有准备好与whoami1
交互,因为它可能需要时间来启动自己:
但是,对于启动,Compose 不会等到容器"准备就绪"(无论这对您的特定应用程序意味着什么(——只会等到它运行。这是有充分理由的。
https://docs.docker.com/compose/startup-order/
他们暗示有两种可能性来检查whoami2
是否准备好了。
使用诸如 wait-for-it、dockerize 或 sh 兼容的 wait-for 等工具。这些是小型包装脚本,您可以将其包含在应用程序的映像中,以轮询给定的主机和端口,直到它接受 TCP 连接。
depends_on确实被docker swarm忽略了:
使用depends_on时需要注意以下几点:
- (...
- 使用版本 3 撰写文件在 swarm 模式下部署堆栈时,将忽略 depends_on 选项。
https://docs.docker.com/compose/compose-file/#depends_on