场景
在生产环境中,运行关键微服务的Docker容器突然无响应。应用团队报告错误,健康检查失败。容器可能陷入重启循环或意外停止。本指南提供系统化的故障排查步骤,以识别和解决运行时问题。
症状
常见症状包括:
- 容器立即退出或反复重启(状态:Exited或Restarting)。
- docker logs返回空或截断的输出。
- 主机资源耗尽(CPU、内存、磁盘I/O)。
- 容器健康检查失败。
- 错误消息如“Container killed by OOM killer”或“Insufficient disk space”。
诊断
从收集基本信息开始:
docker ps -a
查看容器日志(尾部):
docker logs --tail 50 <container>
检查容器状态和退出码:
docker inspect <container> --format '{{.State.Status}} {{.State.ExitCode}}'
监控实时资源使用:
docker stats --no-stream
如果容器仍在运行,可进入其命名空间:
nsenter --target $(docker inspect -f '{{.State.Pid}}' <container>) --mount --uts --ipc --net --pid
检查系统级问题:
- 主机磁盘空间:df -h 和 inode:df -i
- 内核消息:dmesg | tail -20
- Docker守护进程日志:sudo journalctl -u docker -n 50
- 检查cgroup限制:cat /sys/fs/cgroup/memory/docker/.../memory.limit_in_bytes
命令(总结)
docker ps -a– 列出所有容器。docker logs --tail 100 <container>– 查看最近日志。docker inspect <container>– 详细配置。docker stats --no-stream– 实时资源使用。dmesg | grep -i oom– 检查内存不足导致的杀死。df -h– 磁盘使用。top -p $(docker inspect -f '{{.State.Pid}}' <container>)– 进程级视图。
风险控制
- 切勿在未验证时运行破坏性命令如
docker rm。 - 如可能,备份容器数据(如卷)。
- 使用优雅关闭:
docker stop -t 30而非kill。 - 除
docker exec外,避免修改运行中的容器内部。 - 如需重启,考虑使用
--restart=on-failure:5以避免无限循环。
回滚
如果问题与部署相关:
- 回退到之前的镜像版本:docker pull <image>:<previous_tag> 然后 docker run ...
- 如果使用编排工具,回滚部署。
- 手动回滚时,停止当前容器并启动旧容器。
验证
干预后:
- 确认容器状态:docker ps --filter status=running
- 检查日志:docker logs --tail 20 <container>
- 验证健康检查端点:curl -f http://localhost:<port>/health
- 监控资源使用是否稳定。
何时提交OpsGlobal工单
- 内核级别问题(如OOM killer、内核恐慌)。
- 基本修复后容器仍持续崩溃。
- 需要性能剖析(如CPU/IO瓶颈)。
- 多个容器受影响,提示主机级问题。
- 具有严格SLA要求的环境,需要立即专家协助。
OpsGlobal提供7x24远程SRE支持,诊断和解决复杂的Docker运行时问题。
适用场景
适合正在处理 DevOps、Docker, 容器运行时, 故障排查, DevOps 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
学习如何诊断和解决生产环境中常见的Docker容器运行时问题。本指南涵盖症状、诊断命令、风险控制、回滚策略以及何时寻求OpsGlobal专家协助。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。