场景
假设你维护的微服务应用突然停止工作,容器无法启动或运行异常。这可能是容器运行时问题,例如 Docker Engine、containerd 或 runc 故障。
症状
- 容器启动后立即退出
- 容器状态为“Exited”或“CrashLoopBackOff”
- 容器运行但无响应或报错
- 资源使用率异常高(CPU/内存)
- Docker 守护进程日志显示错误
诊断
1. 检查容器日志
docker logs --tail 100 <container_id>
查找应用级错误。如果容器未启动,使用 docker logs <container_id> 获取最后输出。
2. 检查容器状态
docker inspect <container_id> | jq '.[0].State'
查看退出代码、重启次数和错误信息。
3. 监控实时事件
docker events --filter 'container=<container_id>' --since '1m'
观察容器的生命周期事件(启动、停止、OOM 等)。
4. 检查资源使用
docker stats --no-stream <container_id>
检查 CPU、内存和 I/O 指标。
5. 检查容器运行时底层状态
使用 crictl 命令直接与 containerd 通信:
crictl ps -a
crictl inspect <container_id>
查看 kubelet 管理的容器详细信息。
6. 检查 Docker 守护进程
journalctl -u docker.service --since '1 hour ago' | grep ERROR
或直接查看 Docker 日志:/var/log/docker.log。
诊断命令总结
| 命令 | 用途 |
|---|---|
docker logs |
查看应用日志 |
docker inspect |
获取容器配置和状态 |
docker events |
监控实时事件 |
docker stats |
查看资源使用 |
crictl ps |
列出 containerd 管理的容器 |
journalctl -u docker |
检查 Docker 系统日志 |
风险控制
- 避免在生产环境直接执行
docker rm -f或docker system prune等破坏性操作。 - 在隔离测试环境复现问题。
- 对容器卷和重要数据提前备份。
- 在执行诊断前,确保有回滚计划。
回滚策略
- 重启容器:尝试
docker restart <container_id>。 - 回滚镜像版本:拉取上一个已知正常的镜像标签:
bash docker pull myapp:v1.0.0 docker stop <container_id> docker rm <container_id> docker run -d --name myapp_container myapp:v1.0.0 - 使用编排工具回滚:如 Kubernetes 执行
kubectl rollout undo deployment/myapp。 - 恢复容器卷:如果使用绑定挂载,从备份恢复数据。
验证
- 确认容器运行:
docker ps显示状态为 Up。 - 检查健康检查端点:
curl http://localhost:8080/health返回 200。 - 查看应用日志无报错。
- 执行功能测试确保服务正常。
何时提交 OpsGlobal 工单
- 初步排查后问题依然无法定位或解决。
- 出现内核级错误(如 OOM kill、kernel panic)。
- 容器运行时组件(containerd、runc)故障影响多个容器。
- 需要深度性能分析或根因分析。
- 生产环境出现持续性故障,需要 7x24 专家支持。
OpsGlobal 提供远程 DevOps/SRE 支持,快速介入,保障业务连续性。
适用场景
适合正在处理 DevOps、Docker, 容器运行时, 故障排查, DevOps 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文深入探讨 Docker 容器运行时的故障排查方法,涵盖常见场景、症状、诊断命令、风险控制、回滚策略和验证步骤,帮助 DevOps/SRE 工程师高效解决问题。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。