Skip to content

🆘 常见问题与排错

问题 1:容器启动后立即退出

bash
# 第一步:看退出码
docker inspect --format='{{.State.ExitCode}}' myapp

# 第二步:看日志
docker logs myapp

# 常见原因和解决:
# ExitCode 0   — 应用执行完就退出了(可能是 CMD 写错)
# ExitCode 1   — 应用报错,查日志
# ExitCode 126 — 命令没权限,检查是否 chmod +x
# ExitCode 127 — 命令找不到,检查 PATH
# ExitCode 137 — 内存不足被 Kill,加 --memory 限制
# ExitCode 139 — 段错误,检查应用代码

# 用交互模式调试
docker run -it --entrypoint /bin/bash myapp
# 进去手动执行启动命令,看看报什么错

问题 2:容器无法联网

bash
# 检查容器 DNS 是否正常
docker exec myapp cat /etc/resolv.conf

# 测试容器能否解析域名
docker exec myapp nslookup google.com

# 检查容器网络模式
docker inspect --format='{{.HostConfig.NetworkMode}}' myapp

# 重置 Docker 网络
docker network prune

# 如果是 bridge 模式下宿主机访问容器 IP 不通——检查 IP 转发
sysctl net.ipv4.ip_forward
# 应该是 1,如果是 0:
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

问题 3:磁盘空间被 Docker 吃光

bash
# 查看 Docker 磁盘占用
docker system df -v

# 大范围清理(删除停止的容器、无用镜像、未使用的网络和构建缓存)
docker system prune -a -f
# -f 会跳过确认提示;生产环境建议先不加 -f 看清删除范围

# 清理所有未使用的 volume(⚠️ 会删除数据!)
docker volume prune -f

# 清理构建缓存
docker builder prune -a -f

# 配置日志轮转(防止日志撑爆——最常见原因!)
# /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
systemctl restart docker

问题 4:docker pull 慢/超时

bash
# 配置国内镜像加速(中国用户必备)
cat > /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://docker.1ms.run"
  ]
}
EOF
systemctl restart docker

# 验证是否生效
docker info | grep -A 5 "Registry Mirrors"

# 如果公司有私有仓库
docker login registry.company.com
docker pull registry.company.com/myapp:latest

# 手动指定平台拉取(解决多架构问题)
docker pull --platform linux/amd64 myapp:latest