docker swarm 模式服务之间启动顺序问题
结论:
一般的都是使用 depends_on 来指定启动顺序,而且存在依赖服务容器不会等待ready状态问题。
但是 在swarm 模式下,depends_on是无效的,可以采用wait-for-it.sh 脚本拖延启动,如果还有其他方法,欢迎补充。
下面是官方资料,地址
depends_on
表达服务之间的依赖性。服务依赖项导致以下行为:
docker-compose up
以依赖性顺序启动服务。在以下示例中,db
和redis
在之前启动web
。docker-compose up SERVICE
自动包含SERVICE
的依赖项。在下面的示例中,docker-compose up web
还将创建并启动db
和redis
。docker-compose stop
按依赖关系顺序停止服务。在以下示例中,web
在db
和之前停止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,会
忽略该选项 。