码头工人堆栈部署depends_on

时间:2020-06-24 15:46:00

标签: docker docker-compose docker-swarm docker-stack

给出撰写文件

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时 服务whoami1whoami2似乎是随机启动的,并忽略了depends_on条件。

 docker stack deploy -c docker-compose.yaml test
Creating network test_default
Creating service test_whoami1
Creating service test_whoami2

docker swarm是否通过依赖项支持服务启动顺序?

1 个答案:

答案 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选项。

https://docs.docker.com/compose/compose-file/#depends_on