Docker 常见报错速查
开发中常遇到的 Docker 报错信息,快速定位原因和解决方案。
Container exited with code 1 / Exited (137)
出现场景:docker run 或 docker-compose up 后容器立即退出
原因:应用启动失败(code 1)或被 OOM Killer 杀掉(code 137)
解决方案:
- 查看日志:docker logs <container>
- 交互式排查:docker run -it <image> /bin/sh
- code 137:增加内存限制 --memory=2g
- code 1:检查应用配置、环境变量、依赖是否正确
- 检查 Dockerfile 的 CMD/ENTRYPOINT 是否正确
预防:本地先测试镜像,设置合理的资源限制和健康检查
Bind for 0.0.0.0:8080 failed: port is already allocated
出现场景:docker run -p 8080:80 时
原因:宿主机 8080 端口已被其他容器或进程占用
解决方案:
- 查找占用:docker ps | grep 8080 或 lsof -i :8080
- 停止占用的容器:docker stop <container>
- 换一个端口:docker run -p 8081:80
- 清理已停止的容器:docker container prune
预防:用 docker-compose 统一管理端口映射,避免冲突
Error response from daemon: pull access denied / manifest unknown
出现场景:docker pull 或 docker run 时
原因:镜像名称错误、不存在、或需要登录私有仓库
解决方案:
- 检查镜像名称拼写和 tag:docker search <name>
- 私有仓库先登录:docker login <registry>
- 指定正确的 tag:docker pull nginx:1.25 而非 nginx:latest
- 国内拉取慢:配置镜像加速器
预防:在 Dockerfile 中使用具体版本 tag,不用 latest
no space left on device
出现场景:docker build 或 docker pull 时
原因:Docker 占用了大量磁盘空间(镜像、容器、卷)
解决方案:
- 查看 Docker 磁盘使用:docker system df
- 清理所有未使用资源:docker system prune -a
- 清理悬空镜像:docker image prune
- 清理未使用的卷:docker volume prune
- 清理构建缓存:docker builder prune
预防:定期执行 docker system prune,CI 中每次构建后清理
Could not resolve host / Network unreachable
出现场景:容器内无法访问网络(apt update、pip install 等)
原因:容器 DNS 配置问题或网络模式不对
解决方案:
- 检查 DNS:docker run --dns 8.8.8.8 <image>
- 检查网络模式:docker run --network host <image>
- 重启 Docker daemon:systemctl restart docker
- 检查宿主机网络是否正常
预防:在 docker-compose.yml 中配置 dns,或使用自定义网络