作为IT工程师,掌握Docker故障排查技能至关重要。以下是系统化的Docker问题排查方法:
查看Docker版本信息
docker version
docker info
检查Docker服务状态
systemctl status docker # Systemd系统
service docker status # SysVinit系统
查看容器日志
docker logs <container_id/name>
docker logs --tail 100 <container_id> # 查看最后100行
docker logs -f <container_id> # 实时跟踪日志
检查容器状态
docker ps -a # 查看所有容器(包括停止的)
docker inspect <container_id> # 查看容器详细信息
进入容器内部排查
docker exec -it <container_id> /bin/bash # 进入运行中的容器
docker run -it --rm <image> /bin/bash # 启动临时容器进行测试
检查镜像信息
docker images
docker inspect <image_id>
docker history <image_name> # 查看镜像构建历史
构建问题排查
docker build --no-cache . # 不使用缓存重新构建
docker build --progress=plain . # 显示详细构建输出
网络配置检查
docker network ls
docker network inspect <network_name>
网络连通性测试
docker run --rm busybox ping <target_host>
docker exec <container_id> curl -v http://<service_name>
卷和存储检查
docker volume ls
docker volume inspect <volume_name>
df -h # 检查主机磁盘空间
清理无用数据
docker system df # 查看Docker磁盘使用情况
docker system prune # 清理无用对象(谨慎使用)
事件监控
docker events # 实时监控Docker事件
性能分析
docker stats # 实时容器资源使用统计
docker top <container_id> # 查看容器进程
检查点与恢复
docker checkpoint create <container_id> <checkpoint_name>
docker start --checkpoint <checkpoint_name> <container_id>
容器启动失败
docker logs <container_id>
netstat -tulnp | grep <port>
docker run -it --entrypoint /bin/bash <image>
网络连接问题
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id>
docker run --rm busybox nslookup <hostname>
存储空间不足
docker image prune -a
权限问题
--privileged
标志(仅限测试环境)--restart=unless-stopped
或--restart=on-failure
策略通过系统性地应用这些排查方法,可以快速定位和解决大多数Docker相关问题。