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

Docker Swarm设置start-first后仍先停旧容器,求排查配置问题

问题原因及修复方法

你已经设置了order: start-first,但Docker Swarm默认不会等新容器健康检查通过才停旧容器——默认的monitor参数值为none,只要新容器进入running状态,就会立刻停止旧容器。

要实现「等新容器健康检查通过后再停止旧容器」的预期效果,需要在update_config中添加monitor配置,指定等待健康检查完成,同时设置合理的超时时间。

修改后的deploy配置参考:

deploy:
    update_config:
        parallelism: 1
        order: start-first
        failure_action: rollback
        delay: 10s
        monitor: 60s  # 可根据服务启动速度调整,超时未通过健康检查则触发回滚
    rollback_config:
        parallelism: 0
        order: stop-first
    restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s

补充两个注意点:

  • monitor的数值是允许新容器完成健康检查的最长超时时间,比如设置为60s,意味着新容器必须在60秒内通过健康检查,否则Swarm会执行回滚操作。
  • 确保你的健康检查逻辑准确,curl --fail localhost:10001/api/instance/code能真实反映服务的就绪状态,若健康检查本身判断有误,Swarm也无法正确识别服务状态。

内容的提问来源于stack exchange,提问作者Sultan Zhumatayev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:17:21