故障排除指南

本指南帮助你诊断和解决在使用 Docker 时可能遇到的常见问题。按照问题类型分类,提供详细的故障排除步骤。

收集系统信息

使用以下命令收集 Docker 系统信息:

# 查看 Docker 版本信息
docker version

# 查看 Docker 系统信息
docker info

# 查看 Docker 日志
journalctl -u docker.service

检查容器状态

使用以下命令检查容器状态:

# 查看所有容器状态
docker ps -a

# 查看容器日志
docker logs [容器ID]

# 查看容器详细信息
docker inspect [容器ID]

常见问题分类

安装问题

Docker 安装和初始化相关问题

  1. 如果遇到权限错误,确保当前用户在 docker 用户组中:
    sudo usermod -aG docker $USER
    newgrp docker
  2. 检查 Docker 守护进程状态:
    sudo systemctl status docker
    sudo systemctl start docker
    sudo systemctl enable docker

网络问题

容器网络连接和通信问题

  1. 检查 Docker 网络配置:
    # 查看网络列表
    docker network ls
    
    # 检查网络详情
    docker network inspect bridge
  2. 修改 Docker 守护进程配置:
    # 编辑配置文件
    sudo nano /etc/docker/daemon.json
    
    {
      "dns": ["8.8.8.8", "8.8.4.4"]
    }

存储问题

磁盘空间和数据卷相关问题

  1. 清理未使用的 Docker 资源:
    # 清理未使用的容器、网络、镜像
    docker system prune -a
    
    # 查看 Docker 磁盘使用情况
    docker system df
  2. 检查数据卷状态:
    # 列出所有数据卷
    docker volume ls
    
    # 检查数据卷详情
    docker volume inspect [卷名]

性能问题

容器资源使用和性能相关问题

  1. 查看容器资源使用情况:
    # 查看容器资源统计
    docker stats
    
    # 查看容器进程
    docker top [容器ID]
  2. 设置容器资源限制:
    # 限制 CPU 和内存使用
    docker run -d   --cpus=".5"   --memory=512m   nginx

镜像问题

镜像拉取和构建相关问题

  1. 检查镜像仓库配置:
    # 验证镜像仓库连接
    docker login
    
    # 使用镜像加速器
    sudo nano /etc/docker/daemon.json
    
    {
      "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
    }
  2. 检查 Dockerfile 和构建上下文:
    # 使用构建缓存
    docker build --no-cache -t myapp .
    
    # 查看构建历史
    docker history [镜像ID]

安全问题

容器安全和访问控制问题

  1. 配置访问控制:
    # 以非 root 用户运行容器
    docker run -d   --user 1000:1000   nginx
    
    # 限制容器功能
    docker run -d   --cap-drop ALL   --cap-add NET_BIND_SERVICE   nginx
  2. 扫描镜像漏洞:
    # 使用 Docker Scan
    docker scan [镜像名]
    
    # 查看镜像详细信息
    docker inspect [镜像ID]

常见错误信息

运行时错误

常见的容器运行时错误及解决方案

Error response from daemon: conflict

容器名称冲突,删除同名容器或使用其他名称。

Error response from daemon: port is already allocated

端口被占用,更换端口或停止占用端口的进程。

Error response from daemon: OCI runtime create failed

容器创建失败,检查容器配置和系统资源。

配置错误

常见的配置相关错误及解决方案

Error response from daemon: invalid reference format

镜像名称格式错误,检查镜像名称语法。

Error response from daemon: manifest unknown

镜像不存在或标签错误,检查镜像名称和标签。

Error response from daemon: driver failed programming external connectivity

网络配置错误,检查防火墙和网络设置。

最佳实践建议

预防措施

预防常见问题的最佳实践

  • 定期备份重要数据和配置
  • 监控容器资源使用情况
  • 使用资源限制避免单个容器影响整体系统
  • 保持 Docker 和镜像的更新
  • 使用 docker-compose 管理多容器应用

维护建议

日常维护的最佳实践

  • 定期清理未使用的容器和镜像
  • 使用数据卷持久化重要数据
  • 配置日志轮转避免日志占用过多空间
  • 定期检查安全更新
  • 保持良好的镜像命名和标签管理