Docker在CentOS上的故障排查方法
导读:Docker在CentOS上的故障排查方法 一 快速定位流程 检查运行状态与版本:执行systemctl status docker与docker version,确认守护进程是否存活、客户端与服务端版本是否匹配。若提示无法连接,多半是守...
Docker在CentOS上的故障排查方法
一 快速定位流程
- 检查运行状态与版本:执行systemctl status docker与docker version,确认守护进程是否存活、客户端与服务端版本是否匹配。若提示无法连接,多半是守护进程未启动。
- 查看服务日志:使用journalctl -u docker.service -b(或journalctl -xeu docker.service)定位启动失败的具体报错;部分系统也会写入**/var/log/docker.log**。
- 校验内核与基础依赖:执行uname -r确认内核≥3.10;必要时更新系统并安装必要组件(如yum-utils、device-mapper-persistent-data、lvm2)。
- 核对配置文件:检查**/etc/docker/daemon.json语法与路径权限;CentOS 7上也可同时核查/etc/sysconfig/docker**中的代理、存储路径等配置。
- 验证网络与防火墙:确认firewalld/iptables未阻断Docker网络(如docker0与端口2375/2376);必要时在排障阶段短暂关闭防火墙验证。
- 资源与文件系统:用df -h、free -m、top排查磁盘、内存与CPU压力;异常关机后考虑文件系统检查。
二 常见故障与修复对照表
| 症状 | 可能原因 | 快速修复 |
|---|---|---|
| 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 & & docker rm 或换名启动 |
| 安装时报 Requires: container-selinux > = 2.9 | 依赖版本过低 | 安装/更新 container-selinux 后重装Docker CE |
三 存储驱动与网络关键点
- 存储驱动:优先使用overlay2。在**/etc/docker/daemon.json**中设置{ “storage-driver”: “overlay2”} ,保存后重启Docker;如仍异常,检查内核是否支持并考虑升级。
- 网络连通:排查docker0网桥与自定义网络是否正常;验证firewalld/iptables规则未阻断容器通信;排障时可短暂停止防火墙验证,但生产环境应改为精确放通策略。
- 资源与文件系统:磁盘满、inode耗尽或异常关机导致的文件系统问题,都会引发Docker启动或运行异常;先清理空间、修复文件系统,再重启服务。
四 高风险操作与回退建议
- 清理数据目录:执行**systemctl stop docker & & rm -rf /var/lib/docker/***会删除所有镜像、容器与卷,仅在确认可丢失数据时作为最后手段,并务必先备份。
- 调整SELinux:临时setenforce 0仅用于定位;长期应通过正确的SELinux策略或挂载选项(如Z/ :Z)解决,避免直接禁用SELinux。
- 变更防火墙:排障时可短暂停止firewalld验证,但应恢复并配置精确规则,避免长期暴露风险。
五 一键排查脚本示例
- 复制以下脚本保存为docker-diag.sh,执行:bash docker-diag.sh
#!/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未运行"
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Docker在CentOS上的故障排查方法
本文地址: https://pptw.com/jishu/780449.html
