Ubuntu 20.04上Docker CE运行1-2天停止所有容器该如何排查?
排查步骤按优先级执行如下:
- 优先解决Docker版本不兼容问题
你当前Docker客户端为20.10.8、服务端Engine为19.03.13,跨大版本运行存在明确的API兼容隐患。先完全卸载现有Docker、containerd、runc组件,从Docker官方源安装同一大版本的Docker CE,保证客户端与服务端版本匹配。 - 检查containerd服务日志
你之前仅排查了docker.service的日志,容器停止的调度指令通常由containerd发出,执行命令查看完整日志:sudo journalctl -xu containerd.service --since "7 days ago"
重点匹配容器停止时间点的错误记录、资源报错、主动终止指令。 - 排查系统OOM kill记录
系统级内存不足触发的进程终止不会写入Docker或容器日志,只会留存于系统日志中,执行命令排查:grep -i oom /var/log/syslogdmesg | grep -i oom
若存在对应时间点的OOM kill记录,调整容器资源限制或扩容宿主机内存即可。 - 检查无人值守升级操作
Ubuntu 20.04默认开启无人值守系统升级,若升级过程中更新了containerd、docker相关组件,会自动重启服务导致所有运行中容器停止,查看升级日志匹配时间点:cat /var/log/unattended-upgrades/unattended-upgrades.log
确认是该问题的话,将docker、containerd相关软件包加入无人值守升级的黑名单即可。 - 升级containerd与runc版本
你当前使用的containerd v1.3.7、runc 1.0.0-rc10均为多年前的老旧版本,已知存在偶发容器终止的BUG,直接将containerd升级至1.6.x及以上稳定版、runc升级至1.1.0及以上版本即可覆盖修复这类已知问题。 - 开启Docker debug日志复现定位
若上述步骤都未找到原因,修改/etc/docker/daemon.json添加配置项"debug": true,重启docker服务后等待问题复现,debug级别的日志会记录所有容器操作的发起方、指令详情,可直接定位终止指令来源。 - 排查第三方操作触发的停止
检查所有用户的定时任务、运维脚本、监控告警规则,是否存在docker stop、docker system prune之类会终止容器的操作,很多时候非预期的容器停止都是这类未记录的人工/脚本操作导致。
内容的提问来源于stack exchange,提问作者not2savvy
相关产品推荐
相关产品推荐

