容器突然挂掉的排查步骤
当运行中的容器突然挂掉时,可以按照以下步骤进行排查:
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
:对容器进程进行系统调用分析
预防措施
- 设置合理的资源限制
- 实现完善的日志收集
- 配置容器重启策略
- 设置健康检查
- 监控容器资源使用情况
通过以上步骤,通常可以定位容器突然挂掉的原因并采取相应解决措施。