Docker容器运维与故障排查实战手册

🐳 Docker容器运维与故障排查实战手册

1. 理解Docker日志系统

Docker的日志系统是排查容器问题的首要工具。默认情况下,Docker使用json-file日志驱动,将容器的标准输出(STDOUT)和标准错误(STDERR)保存为JSON格式的文件。

1.1 日志查看基础命令

docker logs命令是与容器日志交互的主要方式:

bash 复制代码
# 实时跟踪日志输出
docker logs -f <container-name>

# 显示最后10行日志
docker logs --tail 10 <container-name>

# 显示带时间戳的日志
docker logs -t <container-name>

# 从特定时间点开始查看日志
docker logs --since="2023-10-27T10:00:00" <container-name>

# 组合使用多个参数
docker logs --tail 20 -t -f <container-name>

1.2 日志文件存储位置

容器日志文件默认存储在/var/lib/docker/containers/<container-id>/<container-id>-json.log。你可以使用以下命令定位具体路径:

bash 复制代码
docker inspect --format='{{.LogPath}}' <container-name>

2. 常见Docker故障排查指南

2.1 容器启动故障

问题现象:容器无法启动或立即退出。

  • 检查容器状态 :使用docker ps -a查看所有容器状态,确认容器是否处于"Exited"状态
  • 查看详细日志 :使用docker logs <container-name>分析错误信息
  • 常见错误与解决方案
    • "exec user process caused: no such file or directory" :检查Dockerfile中WORKDIR设置和文件路径
    • "manifest for not found":验证镜像名称和标签是否正确
    • "executable file not found in $PATH":确认命令存在于容器的PATH环境变量中

2.2 磁盘空间不足问题

问题现象:磁盘占用率达100%,容器功能异常。

  • 检查磁盘空间 :使用df -h查看磁盘使用情况

  • 定位大文件目录 :使用du -h --max-depth=1 /var/lib/docker定位Docker相关大目录

  • 清理无用资源

    bash 复制代码
    # 清理停止的容器、无用网络和构建缓存
    docker system prune -a
    
    # 清理卷(谨慎操作)
    docker volume prune

2.3 网络连接问题

问题现象:容器间通信失败,端口访问不通。

  • 检查容器网络配置 :使用docker inspect <container-name> | grep -A 10 "NetworkSettings"

  • 验证端口映射 :使用docker port <container-name>查看端口映射情况

  • 解决端口冲突

    bash 复制代码
    # 检查端口占用
    netstat -tulnp | grep <port>
    
    # 更改容器映射端口
    docker run -p <new-port>:<container-port> ...

3. Docker守护进程问题排查

当Docker服务本身无法启动时,需要排查守护进程问题。

3.1 守护进程启动失败

错误信息"Job for docker.service failed because the control process exited with error code"

  • 查看服务状态sudo systemctl status docker.service
  • 检查详细日志sudo journalctl -u docker.service
  • 排查步骤
    1. 检查配置文件语法:/etc/docker/daemon.json
    2. 验证文件权限:确保/etc/docker/var/lib/docker目录权限正确
    3. 检查端口冲突:netstat -tuln | grep 2375

4. Docker日志轮转配置

防止日志文件无限增长导致磁盘空间耗尽。

4.1 配置全局日志轮转

编辑/etc/docker/daemon.json文件:

json 复制代码
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",
    "labels": "production_status",
    "env": "os,customer"
  }
}

应用配置:sudo systemctl daemon-reload && sudo systemctl restart docker

4.2 为单个容器设置日志轮转

bash 复制代码
docker run -d \
  --name myapp \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:latest

4.3 不同环境的日志配置建议

环境 max-size参数 max-file参数
开发环境 5m 3
测试环境 10m 5
生产环境 50m 10

5. 高级运维技巧

5.1 容器内直接调试

使用docker exec命令进入容器内部进行诊断:

bash 复制代码
# 进入容器shell
docker exec -it <container-name> /bin/bash

# 在容器内运行特定诊断命令
docker exec -it <container-name> ps aux
docker exec -it <container-name> cat /etc/config.conf

5.2 系统资源监控

  • 实时监控 :使用docker stats查看容器资源使用情况

  • 设置资源限制 :在运行时限制容器资源

    bash 复制代码
    docker run -d --name limited-container \
      --memory=512m \
      --cpus=1.5 \
      myapp:latest

6. 系统化故障排查流程

当遇到Docker问题时,遵循系统化的排查流程可以提高效率:
问题出现 检查容器状态
docker ps -a 查看日志
docker logs 识别问题类型 启动故障 运行异常 性能问题 资源不足 检查镜像
和配置 进入容器
调试 监控资源
使用情况 清理磁盘
和镜像 解决问题 记录解决方案

7. 日常维护最佳实践

  1. 定期检查日志文件大小,防止磁盘空间耗尽
  2. 配置监控告警,对容器异常状态进行实时监控
  3. 使用Docker Compose管理多容器应用,确保正确的启动顺序和依赖关系
  4. 定期更新Docker和镜像,修复已知安全漏洞
  5. 备份重要数据卷,防止数据丢失

通过本手册介绍的方法和流程,你可以建立起系统的Docker运维和故障排查能力。关键是要养成良好的日常维护习惯,在问题发生前预防,在问题发生时能快速定位和解决。

https://github.com/0voice

相关推荐
翼龙云_cloud1 小时前
阿里云渠道商:如何在NAS控制台创建通用型NAS NFS协议文件系统?
运维·服务器·阿里云·云计算
高校俱乐部2 小时前
华为开发者空间 - 云开发环境(容器)IDE插件远程连接操作指导
容器·软件开发
haofafa2 小时前
Docker极简入门实战大纲
运维·docker·容器
朕要睡了2 小时前
aws-sdk-cpp编译
linux·运维·服务器
q***31832 小时前
Nginx搭建负载均衡
运维·nginx·负载均衡
小兔崽子去哪了2 小时前
Docker部署ZLMediaKit流媒体服务器并自定义配置指南
java·后端·容器
刘国华-平价IT运维课堂2 小时前
红帽企业Linux 10.1发布:AI命令行助手、量子安全加密和混合云创新
linux·运维·服务器·人工智能·云计算
生活爱好者!2 小时前
效率高!开源协作 Wiki 与文档管理平台 NAS一键部署docmost
运维·网络·docker·容器·开源