温馨提示×

Docker在CentOS中的故障排查

小樊
49
2025-10-02 16:40:38
栏目: 智能运维

Docker在CentOS中的故障排查指南

一、通用基础排查步骤

1. 检查Docker服务状态

使用systemctl status docker.service命令确认Docker服务是否正在运行。若未启动,可通过systemctl start docker.service启动服务;若启动失败,需结合日志进一步分析。

2. 查看Docker日志

服务启动失败时,日志是定位问题的核心。可使用journalctl -u docker.service(实时日志)或tail -f /var/log/docker.log(历史日志)查看错误信息,如依赖缺失、配置错误等。

3. 验证Docker安装正确性

通过docker version命令检查Docker是否安装成功及版本兼容性(需符合CentOS系统支持要求)。若未安装,需按照官方文档执行sudo yum install docker安装。

4. 清理Docker缓存

若遇到缓存异常(如镜像拉取失败、容器启动报错),可停止Docker服务并删除缓存目录:sudo systemctl stop docker.service && sudo rm -rf /var/lib/docker/*,随后重启服务。

二、常见特定故障排查

1. 启动类故障

  • 无法连接到Docker守护进程:通常因服务未启动,执行systemctl start docker即可;若仍无法连接,检查/var/run/docker.sock是否存在,若不存在则删除后重启服务。
  • Docker服务启动失败:常见原因包括SELinux冲突、配置文件错误或内核不兼容。可通过journalctl -u docker.service查看具体错误,如“Failed to start Docker Application Container Engine”。
  • SELinux权限问题:若使用-v挂载目录时出现“Permission denied”错误,可通过以下方式解决:① 运行容器时添加--privileged=true参数;② 临时禁用SELinux(setenforce 0);③ 调整SELinux规则(如chcon -Rt svirt_sandbox_file_t /path/to/mount)。
  • 防火墙冲突:若Docker启动时报错“Cannot start daemon due to firewall rules”,可临时关闭防火墙(systemctl stop firewalld)测试是否解决;若需保留防火墙,需添加--add-masquerade规则允许Docker流量:firewall-cmd --permanent --add-masquerade && firewall-cmd --reload
  • 内核错误:若遇到“Kernel does not support overlay2”等内核相关错误,需升级内核至最新稳定版(yum update kernel),并在/etc/docker/daemon.json中添加"storage-driver": "overlay2"配置。

2. 网络类故障

  • 容器无法互相通信:首先确认容器是否在同一网络(docker network inspect <network_name>),若不在同一网络,可通过docker network connect <network_name> <container_id>连接;若在同一网络仍无法通信,检查Docker网桥配置(brctl show)。
  • 容器无法访问外部网络:可能是防火墙或DNS配置问题。检查/etc/resolv.conf中的DNS服务器是否正确(如添加8.8.8.8),并确保防火墙允许Docker流量(firewall-cmd --permanent --add-masquerade)。
  • Docker0网桥冲突:若docker0网桥IP与宿主机或其他设备冲突,可修改/etc/docker/daemon.json中的"bip"参数(如"bip": "192.168.1.1/24"),随后重启Docker服务。

三、其他常见问题排查

1. 配置文件错误

Docker配置文件(CentOS 7位于/etc/sysconfig/docker,CentOS 8及以上位于/etc/docker/daemon.json)中的语法错误或无效设置会导致服务无法启动。需用文本编辑器(如vi)检查配置,重点关注代理设置、存储路径等项,修正后重启服务。

2. 磁盘空间不足

df -h显示磁盘空间不足(如/var分区使用率超过90%),需清理不必要的文件(如/var/log下的旧日志、/tmp目录下的临时文件),或扩展磁盘空间后重启Docker。

3. 端口占用

若Docker启动时报错“Address already in use”,说明端口被占用。可使用netstat -tulnp | grep <port>ss -tulnp | grep <port>查找占用端口的进程,终止该进程(kill -9 <pid>)或修改Docker容器端口映射。

0