首页/云/云与容器速查/容器退出码速查(0/1/125/126/127/137/143)

容器退出码速查(0/1/125/126/127/137/143)

退出码是最快的线索:137 与 143 都与信号相关(128+N),125-127 是 Docker 自身或命令问题。先看码再看日志,方向不跑偏。

云与容器速查云更新于 2026-10-13

容器退出码怎么看

退出码是最快的一条线索:它告诉你进程是怎么结束的,日志才说明为什么结束。被信号终止的退出码等于信号编号加一百二十八,因此强制终止与正常终止有明确的数值特征;容器运行时自身产生的错误码则集中在一百二十五到一百二十七之间。两者含义完全不同,先分清类型再去看日志。

基本信息

正常退出退出码为零,一次性任务符合预期
应用报错退出码一,需看日志里的具体异常
运行时错误一百二十五到一百二十七,通常是参数、权限或命令问题
信号终止信号编号加一百二十八,如强制终止与正常终止
查看方式列表看状态,详情看状态字段里的退出码与是否内存超限
组合判断退出码加日志加时间戳,三者一起看结论才可靠

典型使用场景

  • 区分故障类型:先判定是应用自己退出还是被外部终止
  • 定位内存问题:确认是否因超出内存上限被强制终止
  • 验证优雅退出:确认收到终止信号后是否按预期收尾
  • 排查启动失败:命令不存在或权限不足的退出码很有辨识度
  • 核对一次性任务:以零退出码作为任务成功的判定依据
  • 构建监控规则:按退出码与重启次数设置告警阈值

常见退出码

退出码含义下一步
0正常退出一次性任务符合预期
1应用报错看日志里的异常堆栈
125运行时执行失败检查启动参数与镜像
126命令不可执行检查权限或文件格式
127命令不存在核对启动命令与工作目录
137被强制终止内存超限或健康检查失败被杀
143收到终止信号优雅停止,通常属于正常
255运行环境或脚本自身错误结合上下文判断

核对现场

核对现场
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"   # 列表看状态
docker inspect myapp -f '{{.State.ExitCode}} {{.State.OOMKilled}}'      # 退出码与内存超限
docker logs myapp --tail=100                                            # 退出前的输出
docker inspect -f '{{.State.StartedAt}} {{.State.FinishedAt}}' myapp     # 时间线
# 退出码说明怎么死的,日志说明为什么死的
退出码是结论,日志是原因:把两者与启动结束时间对齐,多数崩溃问题不需要反复重启试错就能定性。
强制终止不等于内存超限:也可能是人为清理、节点资源回收或健康检查失败导致的终止,要结合是否标记为内存超限来判断。
一百二十五到一百二十七这类错误不会产生应用日志:因为应用根本没起来,此时应该去看运行参数与镜像内容,而不是翻业务日志。
把非零退出码一律当成代码缺陷会走很多弯路:先按退出码分好类,再决定是查代码、查资源还是查运行参数。

与其他信号的配合

  • 把退出码与是否内存超限放在一起判断,避免误判原因
  • 结合启动与结束时间还原时间线,判断故障发生顺序
  • 一次性任务的退出码是判定成功的首要依据
  • 对反复出现的退出码建立告警规则,缩短发现时间
  • 把退出码含义整理进运维手册,值班人员不必临场查阅
把退出码与告警结合:重启次数与退出码组成规则后,问题能在用户感知之前被系统发现,而不是靠人工巡检。

易错点

  • 把所有强制终止都当成内存超限,忽略人为清理与探针失败的可能
  • 只看容器日志:运行参数类错误根本不会产生应用日志
  • 忽略退出码只看状态,反复重启试错而无结论
  • 一次性任务以运行中为标准判断成功,任务其实早已失败退出
  • 不记录退出时间,无法与发布、变更等事件对齐

数据来源与参考

  • Docker Docs:docker run(Exit codes)
  • Linux signal(7)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌