一、Docker基础问题排查
1.1 Docker服务无法启动
问题现象:执行docker ps
命令时返回"Could not connect to Docker daemon"
根本原因分析:
Docker守护进程未运行
用户权限不足
系统资源不足导致启动失败
配置文件损坏
详细解决步骤:
检查Docker服务状态:
sudo systemctl status docker
手动启动Docker服务:
sudo systemctl start docker
检查启动日志:
journalctl -u docker.service -b --no-pager
常见修复方案:
权限问题修复:
sudo usermod -aG docker $USER newgrp docker
配置文件重置:
sudo mv /etc/docker/daemon.json /etc/docker/daemon.json.bak sudo systemctl restart docker
存储驱动问题:
编辑/etc/docker/daemon.json
:{ "storage-driver": "overlay2" }
1.2 容器网络连接问题
docker network inspect bridge
典型症状:
容器无法访问外部网络
容器间无法通信
端口映射失效
深度解决方案:
诊断网络配置:
检查iptables规则:
sudo iptables -L -n -v --line-numbers
常见修复命令:
重置Docker iptables规则:
sudo systemctl restart docker
手动添加规则:
sudo iptables -I DOCKER-USER -j ACCEPT
检查网络驱动:
docker info | grep "Network"
自定义网络创建:
docker network create --driver=bridge --subnet=192.168.100.0/24 my-bridge
二、容器运行时问题
2.1 容器异常退出
问题分析流程:
查看退出状态码:
docker inspect -f '{{.State.ExitCode}}' <container>
0:正常退出
非0:异常退出
查看完整日志:
docker logs --tail=100 -f <container>
常见原因与解决方案:
案例1:内存不足(OOM Killer)
症状:
exit code 137
解决方案:
docker run -m 512m --memory-swap=1g <image>
案例2:应用崩溃
症状:应用特定的错误码
解决方案:
docker run --restart=on-failure:5 <image>
2.2 容器性能问题
性能诊断工具箱:
容器资源监控:
docker stats <container>
深入分析:
# CPU分析 docker exec -it <container> top # 内存分析 docker exec -it <container> free -m # IO分析 docker exec -it <container> iostat -x 1
优化方案:
CPU限制:
docker run --cpus=1.5 <image>
IO限制:
docker run --device-read-bps=/dev/sda:1mb <image>
三、存储与数据持久化问题
3.1 数据卷(Volume)问题
常见问题场景:
数据卷权限拒绝
数据卷未正确挂载
数据卷占用空间过大
解决方案:
权限问题修复:
docker run -v /host/path:/container/path:Z <image>
或
chcon -Rt svirt_sandbox_file_t /host/path
数据卷空间清理:
docker volume prune
高级诊断:
# 查找大文件 docker exec <container> find / -type f -size +100M # 查看卷使用情况 docker system df -v
3.2 存储驱动问题
典型症状:
容器启动缓慢
磁盘空间快速增长
"No space left on device"错误
解决方案:
清理Docker存储:
docker system prune -a --volumes
修改存储驱动配置(/etc/docker/daemon.json):
{ "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] }
手动清理overlay2:
sudo find /var/lib/docker/overlay2 -name "diff" -type d -exec du -sh {} + | sort -rh
四、镜像构建问题
4.1 Docker构建缓慢
优化策略:
构建缓存优化:
# 将变化频率低的指令放在前面 COPY package.json . RUN npm install COPY . .
多阶段构建:
FROM node:14 as builder WORKDIR /app COPY . . RUN npm install && npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html
使用构建工具:
docker buildx build --platform linux/amd64,linux/arm64 -t <image> .
4.2 镜像安全扫描
安全实践:
# 使用Trivy扫描
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image <image>
# 使用Docker Scout
docker scout quickview <image>
五、高级调试技巧
5.1 容器内调试
添加调试工具:
RUN apt-get update && apt-get install -y \ procps \ net-tools \ vim \ strace
使用调试镜像:
docker run --rm -it --pid=container:<target> --net=container:<target> busybox
内核调试:
docker run --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it <image>
5.2 性能分析工具
perf工具使用:
docker run --privileged --pid=host -it alpine sh apk add perf perf top
ebpf工具:
docker run -it --privileged --pid=host --net=host -v /lib/modules:/lib/modules -v /usr/src:/usr/src kinvolk/bcc
六、集群环境问题
6.1 Swarm模式问题
常见问题:
节点无法加入集群
服务无法扩展
网络分区问题
解决方案:
集群状态诊断:
docker node ls docker service ps <service>
强制重置集群状态:
docker swarm init --force-new-cluster
6.2 Kubernetes与Docker集成
常见冲突:
cgroup驱动不匹配
网络插件冲突
存储驱动问题
解决方案:
# 修改Docker配置
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
七、平台特定问题
7.1 Windows Docker问题
常见问题:
文件路径问题
行尾符问题
性能问题
解决方案:
# 显式设置行尾符
RUN git config --global core.autocrlf false
7.2 MacOS Docker问题
常见问题:
资源限制
文件同步慢
网络问题
优化方案:
# 增加资源分配
docker settings --cpus 4 --memory 8g --swap 2g
# 使用virtiofs加速
docker settings --virtiofs=true
总结
本指南涵盖了Docker使用中最常见的疑难问题及其解决方案,从基础服务问题到高级调试技巧,从单机环境到集群部署。实际环境中,Docker问题的解决往往需要结合具体情况分析,建议遵循以下通用排查流程:
收集日志和错误信息
定位问题发生的具体层次(网络、存储、计算等)
使用隔离法缩小问题范围
应用针对性解决方案
验证并监控修复效果
掌握这些问题的解决方法,将大大提升您的Docker运维效率和系统稳定性。