如何在docker-stack配置文件中使用wait-for-it实现服务启动依赖控制
问题排查点
- command配置缺失myApp1启动命令
你当前的command仅执行了端口等待逻辑,等待完成后进程直接退出,并未启动myApp1本身的服务。正确写法需要在wait-for-it参数后追加你原本的myApp1启动命令,比如原本启动命令是./start-myApp1.sh,就改成command: ["./wait-for-it.sh", "myApp2:40000", "--", "./start-myApp1.sh"],其中--是分隔符,后面跟要执行的实际业务启动命令。 - myApp2配置存在语法错误
myApp2的volumes最后一行少了闭合双引号,会直接导致stack部署解析失败,myApp2服务无法正常创建。 - wait-for-it.sh脚本权限/存在性问题
需要确认myApp1镜像内是否已经内置了wait-for-it.sh脚本,且已经授予了可执行权限(执行chmod +x wait-for-it.sh),否则会出现脚本找不到、无执行权限的报错。 - myApp2端口监听规则问题
确认myApp2服务启动后是监听在0.0.0.0:40000,如果仅监听127.0.0.1,同栈的myApp1容器无法跨容器访问该端口,会导致等待超时。 - swarm模式下服务发现注意事项
docker swarm部署时,同栈服务的域名解析需要一定时间生效,如果等待失败可以给wait-for-it加超时参数,比如加-t 60设置最长等待60秒,避免因为解析延迟导致等待失败。
修正后的配置示例
version: '3' services: myApp1: image: myApp1:latest ports: - 40400:40400 volumes: - "/etc/localtime:/etc/localtime:ro" - "/var/run/docker.sock:/var/run/docker.sock" deploy: mode: replicated replicas: 1 depends_on: - "myApp2" # 替换--后面的内容为你实际的myApp1启动命令 command: ["./wait-for-it.sh", "myApp2:40000", "-t", "60", "--", "./start-myApp1.sh"] myApp2: image: myApp2:latest ports: - 40000:40000 volumes: - "/etc/localtime:/etc/localtime:ro" - "/var/run/docker.sock:/var/run/docker.sock" deploy: mode: replicated replicas: 1
内容的提问来源于stack exchange,提问作者Sang Kim
相关产品推荐
相关产品推荐

