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

Docker Swarm集群中容器无法正常关闭问题排查求助

Docker Swarm容器状态卡住问题排查与修复方案

排查步骤

  • 第一步排查Docker daemon运行日志:执行journalctl -u docker -f --since "10m ago",重点检索容器停止阶段的报错信息,这类问题90%以上是dockerd无法正常向容器进程发送停止信号、或等待容器退出超时导致的状态不同步。
  • 第二步排查宿主机内核日志:执行dmesg -T,检查是否有overlay2/aufs存储驱动报错、cgroup资源泄漏、OOMkill记录、进程IO hang等底层异常。
  • 第三步验证Docker版本:执行docker version确认当前集群的Docker版本,Docker 19.03~20.10的部分早期小版本存在已知的Swarm服务状态同步bug,是这类问题的高发诱因。
  • 第四步检查服务停止配置:执行docker inspect <服务ID> | grep StopSignal确认服务配置的停止信号,若使用了自定义停止信号但容器内进程没有对应处理逻辑,会导致容器无法响应停止请求,永久卡在运行状态。
  • 第五步定位容器进程状态:执行ps aux | grep <卡住容器ID的前6位>,查看对应的宿主机进程是否处于D状态(不可中断睡眠)、或已成为僵尸/孤儿进程,这类进程无法被内核正常终止,会直接导致dockerd的清理流程卡住。

修复方案

  • 临时紧急清理方案:无需重启Docker daemon,找到卡住容器对应的宿主机进程ID后执行kill -9 <进程ID>,进程退出后dockerd会自动同步容器状态为已停止。注意:操作前请确认该容器已无业务流量接入,避免影响在线服务
  • 版本bug修复:如果确认是Docker版本的已知问题,将集群所有节点的Docker升级到20.10.18及以上稳定版,或19.03.15的最终维护版,可解决绝大多数Swarm状态同步类bug。
  • 存储驱动优化:若当前使用已废弃的aufs存储驱动,统一替换为overlay2驱动,aufs存在大量文件锁冲突、容器资源清理失败的已知问题,替换后可大幅降低这类故障概率。
  • 服务配置优化:为所有Swarm服务配置合理的停止宽限时间,执行docker service update --stop-grace-period 30s <服务名>,超出宽限时间后dockerd会自动发送SIGKILL信号强制终止进程,避免无限等待进程响应停止信号。
  • 内核参数优化:在所有集群节点的/etc/sysctl.conf中添加如下配置,执行sysctl -p生效,避免cgroup泄漏、PID不足导致的容器清理失败:
    kernel.pid_max=4194303
    vm.max_map_count=262144
    
  • IO hang类问题修复:如果排查发现容器进程处于D状态,优先检查节点挂载的共享存储、本地磁盘的IO可用性,D状态进程基本都是IO hang导致,修复存储异常后进程即可恢复可终止状态。

内容的提问来源于stack exchange,提问作者Anthony Richir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:02