docker swarm 模式服务之间启动顺序问题

结论:

一般的都是使用 depends_on 来指定启动顺序,而且存在依赖服务容器不会等待ready状态问题。

但是 在swarm 模式下,depends_on是无效的,可以采用wait-for-it.sh 脚本拖延启动,如果还有其他方法,欢迎补充。

 

下面是官方资料,地址

depends_on

表达服务之间的依赖性。服务依赖项导致以下行为:

  • docker-compose up以依赖性顺序启动服务。在以下示例中,dbredis在之前启动web
  • docker-compose up SERVICE自动包含SERVICE的依赖项。在下面的示例中,docker-compose up web还将创建并启动dbredis
  • docker-compose stop按依赖关系顺序停止服务。在以下示例中,webdb之前停止redis

简单的例子:

version: "3.9"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

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

  • depends_on 不会在启动 web 之前等待db和redis变成 “ready” 状态如果您需要等待服务准备就绪,请参阅控制启动顺序以 获取有关此问题的更多信息以及解决该问题的策略。
  • deploying a stack in swarm模式下,3版本的Compose文件中 含有 depends_on,会忽略选项 
posted @ 2021-05-10 16:49  衰草寒烟  阅读(1274)  评论(2编辑  收藏  举报