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

Docker Swarm更新服务后旧任务IP未从Ingress网络移除故障排查求助

Docker Swarm服务DNS解析异常排查与解决方案建议

问题场景

使用Docker Swarm与docker service管理应用,近期更新一个含2个任务的服务后,约半小时内有50%概率无法通过服务名及VIP访问该服务:

  • 执行nslookup tasks.myservice查询到4个IP,其中2个为当前运行容器IP,另外2个属于已停止容器;
  • 在运行容器内执行同一命令仅查到3个IP,同主机的已停止容器IP未出现在列表中;
  • dockerd日志存在异常信息:msg="rmServiceBinding d0283c4f3f93e348e91b5239d30d1af0921e0f606ced2f057e85d8997ec7e8c9 possible transient state ok:false entries:0 set:false ";
  • 临时解决方式为让节点退出Swarm集群后重新加入。

系统信息

uname -a
Linux dongni-nginx2 5.10.134-15.an8.x86_64 #1 SMP Thu Jul 20 00:35:47 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

docker info 
Client: Docker Engine - Community
 Version:    24.0.7
 Context:    default

根因排查方向

  • Swarm DNS服务状态异常:日志中rmServiceBinding的ok:false提示服务绑定移除失败,说明Swarm清理已停止任务的DNS记录时出现异常,大概率是集群节点间raft状态同步延迟、一致性冲突导致旧记录未被清理。
  • 节点网络栈未同步更新:已停止容器的IP在主机层面已释放,但节点的DNS缓存或iptables规则未及时更新,导致集群DNS仍返回无效IP。
  • Docker版本BUG:当前使用的Docker 24.0.7可能存在Swarm DNS记录清理的已知问题,需核对官方版本日志确认是否有对应修复。

规避与解决建议

  • 升级Docker版本:优先升级至最新稳定版(如25.x系列),官方后续版本通常会修复Swarm组件的已知同步问题。
  • 强制刷新服务与DNS状态:出现异常时无需退出集群,可执行docker service update --force myservice强制刷新服务状态,触发DNS记录同步;或在所有节点重启dockerd服务,强制刷新网络规则与缓存。
  • 监控集群节点健康:定期执行docker node ls检查节点状态,确保所有节点处于Ready状态,避免集群脑裂或状态不一致引发的同步问题。
  • 优化服务更新策略:更新服务时使用--update-parallelism 1限制并行更新数量,搭配--update-delay设置新旧任务切换间隔,确保旧任务完全清理后再启动新任务,减少状态冲突概率。

内容的提问来源于stack exchange,提问作者刘思凡

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:25:04