预约咨询 提交工单

Docker容器运行时故障排查:站点可靠性工程师实战指南

深入探讨实际的Docker运行时问题,从容器崩溃到资源耗尽,包含诊断命令、风险控制措施以及OpsGlobal的升级路径。

Docker容器运行时故障排查:站点可靠性工程师实战指南
DevOps 6min 29 浏览 2026-07-22
Docker容器运行时故障排查SREKubernetes

场景

生产环境中,Docker容器可能因多种原因突然停止、无法启动或表现出异常行为。常见场景包括:容器反复重启(CrashLoopBackOff)、内存泄漏导致OOMKill、磁盘空间耗尽、以及挂载卷权限错误。

症状

  • 容器状态为Exited或CrashLoopBackOff(在Kubernetes中)
  • 主机日志显示“out of memory”或“cannot allocate memory”
  • docker ps 输出为空或容器列表不完整
  • 应用无法响应,但容器仍在运行(僵死进程)

诊断

1. 检查容器状态

docker ps -a | grep <container-name>
docker inspect <container-id> --format '{{.State.Status}}'

2. 查看日志

docker logs --tail 100 <container-id>
docker logs --since 5m <container-id>

3. 检查资源使用

docker stats --no-stream <container-id>

4. 分析宿主机资源

free -h
df -h
top -bn1 | head -20

5. 检查Docker守护进程

journalctl -u docker --since "5 minutes ago"

命令

  • 重启容器docker restart <container-id> (临时缓解)
  • 删除并重建docker rm -f <container-id> 然后重新运行
  • 进入容器调试docker exec -it <container-id> /bin/sh (如果容器仍在运行)
  • 导出容器文件系统docker export <container-id> > container.tar

风险控制

  • 在生产环境执行 docker restart 前,确保已启用健康检查(healthcheck)并配置了优雅停机(stop_grace_period)。
  • 使用 docker rm -f 会立即终止进程,可能丢失未持久化的数据。优先使用 docker stop 给予容器时间处理信号。
  • 在Kubernetes中,避免直接使用docker命令操作Pod的容器,应使用 kubectl 以避免编排状态不一致。

回滚

  • 如果是镜像更新导致的问题,回退到上一个稳定标签: bash docker pull <image>:<previous-tag> docker-compose up -d (如果使用Compose)
  • 在Kubernetes中,使用 kubectl rollout undo deployment/<name> 回滚到上一个版本。

验证

  • 确认容器状态为 Updocker pskubectl get pods
  • 应用健康检查端点返回200:curl http://localhost:<port>/health
  • 资源使用稳定:docker stats 显示内存和CPU在预期范围内
  • 日志无错误:docker logs --tail 50 <container-id> 末尾无异常

何时提交OpsGlobal工单

当您遇到以下情况时,请立即提交工单并由我们的SRE团队介入: - 执行上述步骤后容器仍无法恢复 - 涉及Docker的存储驱动(如overlay2)损坏,需要修复文件系统 - 多个宿主机的Docker守护进程同时出现故障 - 需要分析Docker daemon的coredump或调试模式(-D)日志 - 需要评估和调整Docker的运行时参数(如 --default-ulimit--oom-score-adjust

适用场景

适合正在处理 DevOps、Docker, 容器运行时, 故障排查, SRE 相关问题的团队,用于快速建立排查路径和交付标准。

问题背景

深入探讨实际的Docker运行时问题,从容器崩溃到资源耗尽,包含诊断命令、风险控制措施以及OpsGlobal的升级路径。

排查步骤

先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。

命令示例

示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。

风险说明

生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。

回滚方案

保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。

交付清单

问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。

!

遇到类似技术问题?

如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。

工单 WhatsApp 联系 咨询