以下是针对CentOS环境下Docker常见故障的系统化排查步骤,覆盖服务状态、日志分析、配置文件、资源限制、网络问题等核心场景:
首先确认Docker守护进程是否正常运行,使用以下命令查看服务状态:
systemctl status docker.service
若服务未启动(显示inactive),尝试启动服务:
systemctl start docker.service
若启动失败,需结合后续日志分析具体原因。
Docker日志是故障排查的关键,可通过以下命令查看实时日志或最近记录:
# 查看实时日志(适用于启动失败场景)
tail -f /var/log/docker.log
# 查看Docker守护进程的详细日志(推荐)
journalctl -u docker.service --no-pager -n 50
日志中常见的错误包括:依赖缺失(如overlay2内核模块未加载)、配置文件错误、磁盘空间不足等。
CentOS 7中Docker的主配置文件通常位于/etc/sysconfig/docker,CentOS 8+则使用/etc/docker/daemon.json。检查配置文件是否存在语法错误或不合理设置:
# CentOS 7查看配置文件
vi /etc/sysconfig/docker
# CentOS 8+查看配置文件
vi /etc/docker/daemon.json
常见错误:代理设置错误、存储路径权限不足、insecure-registries配置不当。修改后需重启Docker服务使配置生效:
systemctl restart docker.service
```。
#### **4. 清理Docker缓存与无用资源**
若遇到缓存冲突、磁盘空间不足或镜像/容器残留问题,可清理Docker缓存:
```bash
# 停止Docker服务
sudo systemctl stop docker.service
# 删除所有容器、镜像、网络和卷(谨慎操作,会清除所有数据)
sudo rm -rf /var/lib/docker/*
# 重启Docker服务
sudo systemctl start docker.service
此外,可定期使用以下命令清理无用资源(不影响运行中的容器):
docker system prune -a --volumes # 删除所有未使用的资源
docker image prune -a # 删除悬空镜像
```。
#### **5. 处理SELinux权限问题**
SELinux(安全增强模块)可能导致容器无法访问主机文件系统或挂载目录(常见错误:`Permission denied`)。解决方法:
- **临时禁用SELinux**(测试用,生产环境需配置策略):
```bash
setenforce 0
/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled。chcon -Rt svirt_sandbox_file_t /path/to/host/dir
```。
CentOS的firewalld或iptables可能阻止Docker的网络通信(常见错误:容器无法访问外部网络、端口冲突)。排查步骤:
firewall-cmd --list-all # CentOS 7+
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
sudo iptables -L -n
systemctl restart docker.service
```。
Docker依赖Linux内核的overlay2存储驱动和br_netfilter网络模块。检查内核模块是否加载:
lsmod | grep overlay # 检查overlay模块
lsmod | grep br_netfilter # 检查br_netfilter模块
若未加载,手动加载模块:
sudo modprobe overlay
sudo modprobe br_netfilter
此外,确保内核版本符合Docker要求(CentOS 7需内核≥3.10,CentOS 8+需内核≥4.18)。
若Docker服务正常但容器无法启动,需检查容器内部状态:
docker ps -a # 列出所有容器(包括停止的)
docker logs <container_id> # 获取容器输出
docker exec -it <container_id> /bin/bash # 进入容器内部
常见容器问题:应用程序崩溃(如OOM Killer终止进程)、配置文件错误、端口冲突。容器启动失败可能因主机资源不足(内存、磁盘空间):
df -h # 查看磁盘使用情况,重点关注/var/lib/docker所在分区
free -h # 查看内存剩余量
/etc/docker/daemon.json,增加内存限制:{
"default-ulimits": {
"memlock": {
"Name": "memlock",
"Hard": -1,
"Soft": -1
}
}
}
或增加交换空间:sudo fallocate -l 4G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```。
若以上步骤均无法解决问题,可尝试卸载并重新安装Docker:
# 卸载Docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 清理残留文件
sudo rm -rf /var/lib/docker
# 重新安装Docker(以CentOS 7为例)
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker.service
```。
通过以上步骤,可系统化排查CentOS上Docker的常见故障。若问题仍无法解决,建议参考Docker官方文档或社区论坛(如Docker Hub、Stack Overflow)获取进一步支持。