You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:06:03