在运维工作中,如果运行的一个容器突然挂了,如何排查?

容器突然挂掉的排查步骤

当运行中的容器突然挂掉时,可以按照以下步骤进行排查:

1. 查看容器状态和日志

docker ps -a  # 查看所有容器状态,包括已退出的
docker logs <container_id>  # 查看容器日志
docker inspect <container_id>  # 查看容器详细信息

2. 检查退出代码

docker inspect <container_id> --format='{{.State.ExitCode}}'
  • 退出代码137:通常表示容器被OOM killer杀死
  • 退出代码143:优雅终止(SIGTERM)
  • 退出代码其他非0值:应用自身错误

3. 资源限制检查

docker stats  # 查看容器资源使用情况

检查是否因内存、CPU限制导致容器被杀死

4. 检查主机系统日志

journalctl -u docker --no-pager | tail -n 50  # 查看Docker服务日志
dmesg | tail  # 查看内核日志,特别是OOM killer相关信息

5. 常见原因排查

  • 内存不足:检查容器内存限制和实际使用
  • 应用崩溃:查看应用自身日志
  • 存储问题:检查磁盘空间(df -h)和inode(df -i)
  • 健康检查失败:检查容器健康检查配置
  • 主机资源竞争:检查主机整体资源使用情况

6. 复现问题

如果可以复现,尝试以交互模式运行容器:

docker run -it --rm <image> /bin/sh

7. 高级排查工具

  • docker events:实时监控Docker事件
  • strace/perf:对容器进程进行系统调用分析

预防措施

  • 设置合理的资源限制
  • 实现完善的日志收集
  • 配置容器重启策略
  • 设置健康检查
  • 监控容器资源使用情况

通过以上步骤,通常可以定位容器突然挂掉的原因并采取相应解决措施。

posted @ 2025-07-28 20:37  天道酬勤zjh  阅读(42)  评论(0)    收藏  举报