Docker在CentOS上的故障排查方法
一 快速定位流程
二 常见故障与修复对照表
| 症状 | 可能原因 | 快速修复 |
|---|---|---|
| Cannot connect to the Docker daemon at unix:///var/run/docker.sock | Docker未启动或socket异常 | systemctl start docker;若/var/run/docker.sock为目录,rm -rf /var/run/docker.sock 后重启 |
| Unit docker.service failed to load: No such file or directory | 包未装或服务文件缺失 | 重新安装Docker CE;确认/usr/lib/systemd/system/docker.service存在 |
| failed to start docker.service: unit docker.service is masked | 服务被mask | systemctl unmask docker.service 与 docker.socket 后启动 |
| docker0: iptables: no chain/target/match by that name | iptables链缺失(重启后常见) | 重启Docker(systemctl restart docker)或重建iptables规则 |
| Error initializing graphdriver: driver not supported / 启动卡住 | 存储驱动不兼容或异常 | /etc/docker/daemon.json 设置"storage-driver": “overlay2” 后重启 |
| Permission denied 挂载目录不可访问 | SELinux策略限制 | 临时 setenforce 0 验证;或改用Z/ :Z挂载选项、调整SELinux策略 |
| Job for docker.service failed(配置错误) | daemon.json语法错误或路径不可写 | 校验JSON语法,修正配置并重启 |
| container name “xxx” is already in use | 容器名冲突 | docker stop |
| 安装时报 Requires: container-selinux >= 2.9 | 依赖版本过低 | 安装/更新 container-selinux 后重装Docker CE |
三 存储驱动与网络关键点
四 高风险操作与回退建议
五 一键排查脚本示例
#!/usr/bin/env bash
set -Eeuo pipefail
echo "===== 系统信息 ====="
uname -r
echo "内核版本: $(uname -r)"
echo -e "\n===== Docker版本 ====="
docker version 2>/dev/null || echo "Docker未安装或守护进程未运行"
echo -e "\n===== 服务状态 ====="
systemctl is-active --quiet docker && echo "Docker运行中" || {
echo "Docker未运行,状态:"
systemctl status --no-pager -l docker || true
}
echo -e "\n===== 服务日志(最近50行) ====="
journalctl -u docker.service -b --no-pager -n 50 || echo "无法读取journal日志"
echo -e "\n===== 配置文件检查 ====="
if [[ -f /etc/docker/daemon.json ]]; then
echo "daemon.json内容:"
jq . /etc/docker/daemon.json 2>/dev/null || cat /etc/docker/daemon.json
else
echo "未找到 /etc/docker/daemon.json"
fi
echo -e "\n===== 资源与挂载 ====="
df -h | head -n 10
free -m
mount | grep docker || echo "未检测到docker挂载点"
echo -e "\n===== 防火墙状态 ====="
systemctl is-active --quiet firewalld && echo "firewalld运行中" || echo "firewalld未运行"