守护进程崩溃时,客户端报“cannot connect to the docker daemon”或无响应,需直查服务状态(systemctl status docker)、日志(journalctl -u docker.service --since "5 minutes ago" -n 100)、oom/磁盘/文件描述符等资源瓶颈、cgroup与overlay2内核兼容性,以及daemon.json配置冲突。
守护进程崩溃时,客户端(如 docker ps)会直接报错“cannot connect to the docker daemon”或卡死无响应。真正要定位原因,得绕过客户端,直查守护进程本身的状态、日志和系统资源约束。
看服务状态和基础日志
先确认 docker 服务是否真挂了,还是只是没启动:
- 运行
sudo systemctl status docker,看是否显示failed或inactive (dead) - 立即拉取最近日志:
sudo journalctl -u docker.service --since "5 minutes ago" -n 100 - 重点搜关键词:
OOM、killed、fatal error、panic、segfault
查系统级资源瓶颈
很多崩溃不是代码问题,而是 Linux 内核在“替你做决定”:
- 内存是否被杀:运行
dmesg -T | grep -i "killed process",看有没有 dockerd 被 OOM Killer 终止的记录 - 磁盘是否满了:
df -h /var/lib/docker,使用率超 95% 就可能触发守护进程异常退出 - 文件描述符是否耗尽:
cat /proc/$(pgrep dockerd)/limits | grep "Max open files",再对比当前使用量:ls /proc/$(pgrep dockerd)/fd | wc -l
验内核与运行时兼容性
边缘设备或老旧系统上,配置和内核不匹配极易导致 dockerd 启动后几秒就退出:
- 检查 cgroup 版本:
cat /proc/1/cgroup | head -n2;再运行docker info | grep -i cgroup,两者必须一致(v1 或 v2) - 确认 overlay2 支持:
grep -i overlay /proc/filesystems应有输出;docker info | grep "Storage Driver"应为overlay2且无警告 - 检查关键内核选项是否启用:
zcat /proc/config.gz | grep -E "(CONFIG_MEMCG_KMEM|CONFIG_CGROUPS)"(若无 config.gz,查/boot/config-$(uname -r))
抓配置与存储驱动冲突
错误的 /etc/docker/daemon.json 可能让 dockerd 启动失败却不报明显错误:
- 临时禁用配置:
sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak,再sudo systemctl restart docker看是否恢复 - 对照安全值检查高频出问题项:
•max-concurrent-downloads建议 ≤3(边缘设备)
•storage-driver必须是overlay2,禁用aufs或devicemapper
•live-restore建议设为true,避免重启 dockerd 时容器被杀











