给出撰写文件
version: '3.8'
services:
whoami1:
image: containous/whoami
depends_on:
- whoami2
whoami2:
image: containous/whoami
当部署到docker swarm 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是否通过依赖项支持服务启动顺序?
答案 0 :(得分:1)
不,至少不是内置的。
即使使用depends_on,whoami2
可能仍未准备好与whoami1
进行交互,因为它可能需要一些时间来启动自身:
但是,对于启动而言,Compose不会等到容器“就绪”(对于您的特定应用程序意味着什么)后才开始等待-直到它开始运行。这是有充分的理由的。
https://docs.docker.com/compose/startup-order/
他们暗示了两个可能性,以检查whoami2
是否准备就绪。
使用诸如wait-for-it,dockerize或sh兼容的wait-for之类的工具。这些是小型包装脚本,您可以将其包含在应用程序的图像中,以轮询给定的主机和端口,直到它接受TCP连接为止。
对于docker swarm,确实忽略了Depends_on:
使用Depends_on时需要注意以下几点:
- (...)
- 以群集模式(版本3的Compose文件)部署群集模式时,将忽略depends_on选项。