Docker容器运行时故障排查DevOpsSRE
场景
假设你的生产环境Docker容器突然退出,或持续重启、无法响应健康检查。常见原因包括应用崩溃、资源耗尽(OOM)、配置错误或基础镜像问题。作为OpsGlobal支持的DevOps/SRE工程师,你需要快速定位并恢复服务。
症状
- 容器状态显示Exited (1)或Restarting。
docker logs <container>显示应用错误或退出信息。docker inspect <container>显示OOMKilled为true。- 健康检查失败(
docker ps中STATUS显示unhealthy)。 - 资源指标(CPU/内存)异常。
诊断步骤
- 查看容器状态
bash docker ps -a --filter "name=my-service" - 读取日志
bash docker logs --tail 200 my-service - 检查退出码
bash docker inspect my-service --format '{{.State.ExitCode}}'非0退出码通常表示应用错误。 - 检测OOM
bash docker inspect my-service --format '{{.State.OOMKilled}}'为真则需增加内存限制或优化应用。 - 使用docker events实时监控
bash docker events --filter 'container=my-service' --since 1h - 深入主机级诊断
- 查看Docker守护进程日志:
journalctl -u docker- 检查系统资源:free -m、top、df -h- 如果使用crictl(CRI兼容运行时):crictl ps、crictl logs <container-id>
关键命令
docker container restart my-service:重启容器(临时恢复)。docker container stop my-service && docker container start my-service:分步操作。docker run --rm -it my-image bash:启动交互式容器调试。docker stats --no-stream:实时查看容器资源使用。docker system df:查看Docker磁盘使用。
风险控制
- 不要在无备份的情况下直接删除容器或镜像。
- 停止容器前确认不影响下游依赖(如数据库连接)。
- 使用
--restart=on-failure避免无限重启循环。 - 修改资源限制时逐步调整,监控性能。
- 运行诊断命令前通知团队,避免干扰。
回滚流程
- 停止当前故障容器:
docker stop my-service - 拉取先前稳定版本镜像:
docker pull my-registry/my-service:v1.0.0 - 启动旧版本容器:
docker run -d --name my-service-old --restart=always my-registry/my-service:v1.0.0 - 验证服务恢复正常(见下文)。
- 更新编排(如docker-compose或Kubernetes)以指向旧版本。
- 保留故障容器及日志以供事后分析:
docker logs my-service > /tmp/crash.log
验证
- 检查容器运行状态:
docker ps -f status=running - 验证容器内进程:
docker exec my-service ps aux - 发送测试请求确认应用响应正常。
- 监控日志无新错误:
docker logs --tail 50 my-service - 检查资源使用指标是否稳定。
何时提交OpsGlobal工单
- 容器频繁无原因退出,且基础诊断未发现明显问题。
- 需要Docker守护进程或节点级别调试(如内核问题、存储驱动故障)。
- 大规模集群中多个节点出现类似症状。
- 回滚后问题仍然存在,或需要镜像重建与安全补丁。
- 需要调优Docker运行时参数(如ulimit、cgroups)。
- 涉及Docker版本兼容性或升级计划。
提交工单时请提供:容器ID、日志片段、docker inspect输出、主机系统信息及时间线。
适用场景
适合正在处理 DevOps、Docker, 容器运行时, 故障排查, DevOps 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
掌握系统性诊断、命令、安全措施和回滚流程,解决Docker容器运行时问题。了解何时提交OpsGlobal远程SRE支持工单。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。