Docker容器运行时故障排查DevOps
故障场景
假设一个生产环境中的Docker容器突然异常退出,状态显示“Exited (1)”或类似错误码,应用无法访问。容器化应用使用自定义镜像,且之前稳定运行。
症状
docker ps显示容器状态为“Exited”docker logs <container>输出运行时错误,如“exec: permission denied”或“OCI runtime create failed”- 系统日志(如
journalctl -u docker)显示运行时引擎(containerd/runc)异常
诊断步骤
- 检查容器日志:
docker logs <container>获取最近输出 - 检查容器状态详情:
docker inspect <container> --format='{{json .State}}'查看退出码和错误 - 检查Docker守护进程状态:
systemctl status docker或journalctl -u docker -n 100 - 测试基本运行时:
docker run --rm busybox echo test验证容器引擎核心功能 - 查看资源限制:
docker inspect <container> | jq '.[].HostConfig.Memory'确认内存和CPU设置 - 检查镜像完整性:
docker run --rm <image> /bin/sh -c 'ls'确保镜像可执行
关键命令
docker logs <container>
docker inspect <container>
docker system df # 检查磁盘使用情况
journalctl -u docker -n 50 --no-pager
cat /var/log/syslog | grep docker
风险控制
- 使用
--restart=always或--restart=on-failure确保容器自动重启 - 设置资源限制(
--memory,--cpus)防止OOM - 避免无限制的
--privileged权限 - 配置健康检查指令(HEALTHCHECK)
回滚方法
- 如果问题源于新镜像版本,回退到稳定版本:
docker pull <image>:stable然后重新创建容器 - 如果配置文件错误,恢复备份配置文件并重启容器
- 使用
docker commit创建当前容器快照(但不建议长期依赖)
验证流程
- 启动容器后,观察日志:
docker logs -f <container> - 检查容器状态:
docker ps应显示“Up” - 执行应用健康检查(如curl端点)
- 压力测试:模拟负载确认稳定性
何时提交OpsGlobal工单
- 基础排查后问题未解决,且需要深入分析系统级故障
- 怀疑内核、存储驱动或网络插件(如overlay)问题
- 需要修改Docker守护进程配置或升级Docker版本
- 需要专业团队介入恢复数据或优化性能
适用场景
适合正在处理 DevOps、Docker, 容器运行时, 故障排查, DevOps 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文深入探讨Docker容器运行时的常见故障,包括故障场景、症状、诊断步骤、命令、风险控制、回滚方法、验证流程以及何时提交OpsGlobal工单。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。