调试与排错
约 675 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Docker › 最佳实践(在新窗口打开) › 调试与排错
容器启动失败
# 1. 查看日志
docker logs web --tail 50
# 2. 检查状态
docker ps -a | grep web
# 3. 查看详细信息
docker inspect web
# 4. 查看退出码
docker inspect web --format '{{.State.ExitCode}}'
# 常见退出码:
# 0 - 正常退出
# 1 - 应用错误
# 137 - SIGKILL(通常 OOM)
# 139 - SIGSEGV(段错误)
# 143 - SIGTERM(优雅停止)容器无法启动时的调试
# 覆盖 entrypoint 进入容器排查
docker run -it --rm --entrypoint sh nginx:alpine
# 覆盖 CMD
docker run -it --rm nginx:alpine ls -la /etc/nginx
# 使用调试镜像(带更多工具)
docker run -it --rm nginx:alpine apk add curl vim网络问题
# 检查容器 IP
docker inspect web --format '{{.NetworkSettings.IPAddress}}'
# 在容器内测试网络
docker exec web ping 8.8.8.8
docker exec web curl -s http://localhost:80
# 检查端口映射
docker port web
# 检查 DNS 解析
docker exec web cat /etc/resolv.conf
docker exec web nslookup google.com资源问题
# 查看资源使用
docker stats web --no-stream
# 检查内存限制
docker inspect web --format '{{.HostConfig.Memory}}'
# 查看 OOM 状态
docker inspect web --format '{{.State.OOMKilled}}'
# 检查磁盘
docker system df文件系统问题
# 查看文件变更
docker diff web
# 从容器复制文件出来分析
docker cp web:/var/log/app/error.log ./error.log
# 检查挂载
docker inspect web --format '{{json .Mounts}}' | jq .构建问题
# 查看构建日志
docker build -t myapp . 2>&1
# 不缓存重新构建
docker build --no-cache -t myapp .
# 只构建到特定阶段
docker build --target builder -t myapp .
# 查看镜像层大小
docker history myapp
# 使用 dive 分析镜像层
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
wagoodman/dive:latest myappdocker init
# Docker Desktop 提供的交互式初始化工具
docker init
# 交互式选择项目类型(Node/Python/Go/Rust/Java 等)
# 自动生成 Dockerfile、.dockerignore、compose.yml常用调试容器
# 网络调试容器
docker run -it --rm --network host nicolaka/netshoot
# 查看容器文件系统
docker run -it --rm --volumes-from web alpine sh
# 压力测试
docker run -it --rm progrium/stress --cpu 2 --mem 256m常见问题排查流程
小结
- 容器启动失败先
docker logs查看错误;--entrypoint sh覆盖入口进入调试。 - 网络问题检查端口映射、容器 IP、DNS 配置。
- 资源问题用
docker stats+docker inspect检查限制和 OOM。 - 文件问题用
docker diff和docker cp。 docker init快速生成 Dockerfile 和 compose.yml。nicolaka/netshoot网络调试工具集容器。
上一节:镜像安全 下一节:BuildKit 高级构建
