Docker 常见报错速查

开发中常遇到的 Docker 报错信息,快速定位原因和解决方案。

Container exited with code 1 / Exited (137)

出现场景:docker run 或 docker-compose up 后容器立即退出

原因:应用启动失败(code 1)或被 OOM Killer 杀掉(code 137)

解决方案:

  1. 查看日志:docker logs <container>
  2. 交互式排查:docker run -it <image> /bin/sh
  3. code 137:增加内存限制 --memory=2g
  4. code 1:检查应用配置、环境变量、依赖是否正确
  5. 检查 Dockerfile 的 CMD/ENTRYPOINT 是否正确

预防:本地先测试镜像,设置合理的资源限制和健康检查

Bind for 0.0.0.0:8080 failed: port is already allocated

出现场景:docker run -p 8080:80 时

原因:宿主机 8080 端口已被其他容器或进程占用

解决方案:

  1. 查找占用:docker ps | grep 8080 或 lsof -i :8080
  2. 停止占用的容器:docker stop <container>
  3. 换一个端口:docker run -p 8081:80
  4. 清理已停止的容器:docker container prune

预防:用 docker-compose 统一管理端口映射,避免冲突

Error response from daemon: pull access denied / manifest unknown

出现场景:docker pull 或 docker run 时

原因:镜像名称错误、不存在、或需要登录私有仓库

解决方案:

  1. 检查镜像名称拼写和 tag:docker search <name>
  2. 私有仓库先登录:docker login <registry>
  3. 指定正确的 tag:docker pull nginx:1.25 而非 nginx:latest
  4. 国内拉取慢:配置镜像加速器

预防:在 Dockerfile 中使用具体版本 tag,不用 latest

no space left on device

出现场景:docker build 或 docker pull 时

原因:Docker 占用了大量磁盘空间(镜像、容器、卷)

解决方案:

  1. 查看 Docker 磁盘使用:docker system df
  2. 清理所有未使用资源:docker system prune -a
  3. 清理悬空镜像:docker image prune
  4. 清理未使用的卷:docker volume prune
  5. 清理构建缓存:docker builder prune

预防:定期执行 docker system prune,CI 中每次构建后清理

Could not resolve host / Network unreachable

出现场景:容器内无法访问网络(apt update、pip install 等)

原因:容器 DNS 配置问题或网络模式不对

解决方案:

  1. 检查 DNS:docker run --dns 8.8.8.8 <image>
  2. 检查网络模式:docker run --network host <image>
  3. 重启 Docker daemon:systemctl restart docker
  4. 检查宿主机网络是否正常

预防:在 docker-compose.yml 中配置 dns,或使用自定义网络