You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查AWS服务器上Docker容器无预警异常退出的问题?

故障排查步骤

1. 确认容器退出的核心属性

执行以下命令获取容器退出的底层元数据:

docker inspect de63701bbc82 | grep -i 'exitcode\|oomkilled\|finishedat'

重点核对三个信息:

  • OOMKilled字段:如果为true说明程序内存占用超过实例可用上限,被系统内核强制终止。低配AWS EC2实例默认无swap分区,内存突增时OOM日志可能未及时落盘到syslog,属于高频触发原因
  • ExitCode确认是否为固定值2,结合FinishedAt的退出时间,和EC2 CloudWatch监控对应时间点的CPU、内存、磁盘使用率做比对,确认是否是资源耗尽导致的退出

2. 调高日志等级捕获隐藏报错

当前你使用的是默认日志等级,遗漏了程序运行时的底层异常。重新启动容器时加上-v 2参数开启 verbose 全量日志:

docker run -dp 8081:8080 --log-opt max-size=100m --log-opt max-file=5 willnorris/imageproxy -addr 0.0.0.0:8080 -v 2

额外添加的日志滚动配置可以避免日志被自动覆盖,完整留存到下一次退出时排查,能捕获到程序未处理的panic、资源申请失败等隐藏错误。

3. 排查EC2底层事件

登录AWS控制台进入对应EC2实例的「事件」页,查看容器退出时间点是否有实例计划维护、宿主机故障迁移、健康检查失败等底层操作,这类操作会向容器发送终止信号,如果程序没有做信号捕获处理会直接退出,退出码可能显示为2。

临时兜底方案

启动容器时添加--restart=on-failure参数,出现异常退出时会自动重启服务,避免业务中断:

docker run -dp 8081:8080 --restart=on-failure --log-opt max-size=100m --log-opt max-file=5 willnorris/imageproxy -addr 0.0.0.0:8080 -v 2

内容的提问来源于stack exchange,提问作者oligofren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 20:12:04