docker堆栈部署depends_on

Ben*_*Ben 3 docker docker-compose docker-swarm docker-stack

给定撰写文件

version: '3.8'
services:
  whoami1:
    image: containous/whoami
    depends_on:
      - whoami2
  whoami2:
    image: containous/whoami
Run Code Online (Sandbox Code Playgroud)

当部署到 docker swarmdocker 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
Run Code Online (Sandbox Code Playgroud)

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

小智 5

不,至少不是内置的。

\n

即使使用depends_on,也whoami2可能尚未准备好进行交互whoami1,因为它可能需要时间来自行启动:

\n
\n

但是,对于启动,Compose 不会等到容器 \xe2\x80\x9cready\xe2\x80\x9d(无论这对您的特定应用程序意味着什么) - 只等到它\xe2\x80\x99s 运行。这是有充分理由的。

\n
\n

https://docs.docker.com/compose/startup-order/

\n

他们暗示有两种可能性来检查是否whoami2准备好。

\n
\n

使用 wait-for-it、dockerize 或 sh 兼容的 wait-for 等工具。这些是小包装脚本,您可以将其包含在应用程序\xe2\x80\x99s 映像中,以轮询给定的主机和端口,直到它\xe2\x80\x99s 接受 TCP 连接。

\n
\n

对于 docker swarm 来说,depends_on 确实被忽略了:

\n
\n

使用depends_on时需要注意以下几点:

\n
    \n
  • (...)
  • \n
  • 使用版本 3 Compose 文件以 swarm 模式部署堆栈时,将忽略 dependent_on 选项。
  • \n
\n
\n

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

\n