一、基础状态检查命令

1. 服务状态检查

# 查看Docker服务状态
sudo systemctl status docker.service
 
# 查看Docker socket状态
sudo systemctl status docker.socket
 
# 查看containerd状态(Docker依赖)
sudo systemctl status containerd

2. 日志查看命令

# 查看Docker服务日志(最重要)
sudo journalctl -u docker.service --no-pager
 
# 查看最近N条日志
sudo journalctl -u docker.service --no-pager -n 50
 
# 实时查看日志
sudo journalctl -u docker.service -f
 
# 查看系统整体日志
sudo journalctl -xe

二、配置文件检查

1. 配置文件位置和检查

# 检查Docker配置文件
cat /etc/docker/daemon.json
 
# 验证JSON格式是否正确
python3 -m json.tool /etc/docker/daemon.json
 
# 检查systemd配置
ls -la /etc/systemd/system/docker.service.d/
cat /etc/systemd/system/docker.service.d/*.conf
 
# 查看Docker服务配置
sudo systemctl show docker.service

2. 手动启动调试

# 停止服务后手动启动(最有用的调试方法)
sudo systemctl stop docker.service docker.socket
sudo dockerd --debug
 
# 验证配置文件
sudo dockerd --validate

三、系统资源检查

1. 磁盘空间和权限

# 检查Docker数据目录空间
df -h /var/lib/docker
 
# 检查Docker目录权限
ls -la /var/lib/docker/
 
# 修复权限(如需要)
sudo chown -R root:root /var/lib/docker
sudo chmod -R 755 /var/lib/docker

2. 网络和端口检查

# 检查Docker相关端口
sudo netstat -tulpn | grep docker
sudo ss -tulpn | grep 2375
sudo ss -tulpn | grep 2376
 
# 检查代理端口(如有配置)
sudo netstat -tulpn | grep 8889

四、常见问题解决步骤

1. 服务启动失败

# 重置失败状态
sudo systemctl reset-failed docker.service
sudo systemctl reset-failed docker.socket
 
# 重新启动
sudo systemctl start docker.service

2. 配置文件错误

# 备份配置文件
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
 
# 临时移除配置文件测试
sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.temp
sudo systemctl restart docker
 
# 创建最小配置
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{}
EOF

3. 网络/代理问题

# 测试网络连接
curl -I https://registry-1.docker.io/
 
# 测试代理(如有配置)
curl -x http://127.0.0.1:8889 -I https://registry-1.docker.io/
 
# 临时禁用代理
sudo mv /etc/systemd/system/docker.service.d/http-proxy.conf /etc/systemd/system/docker.service.d/http-proxy.conf.disabled
sudo systemctl daemon-reload
sudo systemctl restart docker

五、完整排查流程

第一步:基础检查

sudo systemctl status docker.service
sudo journalctl -u docker.service --no-pager -n 20

第二步:手动启动调试

sudo systemctl stop docker.service docker.socket
sudo dockerd --debug

第三步:配置检查

cat /etc/docker/daemon.json
python3 -m json.tool /etc/docker/daemon.json

第四步:资源检查

df -h /var/lib/docker
sudo systemctl status containerd

第五步:网络检查

sudo netstat -tulpn | grep docker
curl -I https://registry-1.docker.io/

六、常用修复命令

重装 Docker(最后手段)

# 完全卸载
sudo apt-get remove --purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker
 
# 重新安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

清理 Docker 数据

# 停止Docker
sudo systemctl stop docker
 
# 清理数据(会删除所有容器和镜像)
sudo rm -rf /var/lib/docker/*
 
# 重启Docker
sudo systemctl start docker

七、关键排查点总结

  1. 最重要命令sudo journalctl -u docker.service --no-pagersudo dockerd --debug
  2. 配置文件:检查 /etc/docker/daemon.json 的 JSON 格式
  3. 依赖服务:确保 containerd 正常运行
  4. 磁盘空间:确保 /var/lib/docker 有足够空间
  5. 权限问题:检查 Docker 数据目录权限
  6. 网络代理:代理配置是否正确,代理服务是否运行
  7. 端口冲突:检查 Docker 默认端口是否被占用

记住:日志是最好的老师,几乎所有 Docker 问题都可以通过查看详细日志找到根本原因。