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
相关产品推荐
相关产品推荐

