首页/云/Kubernetes 速查/容器退出码与信号解读
集群运维与排障54 条

容器退出码与信号解读

被信号杀死的容器退出码为 128 加信号号:137 对应 SIGKILL、143 对应 SIGTERM,再结合 reason 字段区分内存与探针原因。

Kubernetes 速查云更新于 2026-10-13

退出码是什么

容器退出码是容器主进程结束时返回的数字,用来告诉系统这次运行的结果。零表示正常结束,非零表示异常。被信号强制终止时,退出码等于一百二十八加上信号编号,因此看到一百三十七就代表收到的是强制终止信号。它是判断失败方向的第一层线索,但单凭数字不足以定论。

为什么要结合原因字段一起看

同一个退出码可能对应多种原因:一百三十七既可能是内存超限导致的终止,也可能是探针失败后被执行终止,差别在对象的终止原因字段与事件里。再往下一层,还需要看应用自己输出的最后几行日志。三者组合才能确定是资源问题、探针问题还是应用自身缺陷。

基本信息

适用环境任何 Kubernetes 发行版,由容器运行时上报
零的含义正常结束,一次性任务场景表示成功
非零含义异常结束,具体含义由应用自行定义
信号终止退出码为一百二十八加信号编号
配套字段终止原因、信号、起止时间、重启次数
取证手段读取上一个实例的日志与对象事件

典型使用场景

  • 排查反复重启:先看退出码确定是主动退出还是被终止
  • 核对任务结果:确认一次性任务是否正常完成
  • 识别内存问题:退出码为一百三十七时重点检查内存上限
  • 识别探针问题:同样的退出码出现时核对探针事件
  • 定位镜像问题:命令不存在或不可执行会给出特定退出码
  • 排查优雅退出:观察到终止信号相关退出码时检查信号处理逻辑

获取退出详情

获取退出详情
kubectl get pod web-x -o jsonpath='{.status.containerStatuses[0].lastState.terminated}'   # 上一次终止详情
kubectl describe pod web-x | grep -E 'Last State|Exit Code|Reason|Signal'                    # 关键字段
kubectl logs web-x --previous --tail=100                                                      # 被杀前的日志
kubectl get pod web-x -o jsonpath='{.status.containerStatuses[0].restartCount}'                # 重启次数

常见退出码含义

退出码含义下一步
0正常结束,任务场景表示成功确认是否为预期行为
1应用自身报错退出读上一次日志找异常
126命令存在但不可执行检查权限与文件格式
127找不到命令核对启动命令与镜像内容
137收到强制终止信号,常见于内存超限看内存上限与终止原因
143收到终止信号,通常为正常下线确认是否由探针或缩容触发
终止原因是独立字段,与退出码组合使用:同一个退出码在不同原因下的处理方式完全不同。
任务完成与容器失败是两个不同的结论,一次性任务正常完成时同样会退出,不代表故障。

易错点

  • 把一百三十七一律当成内存问题:探针失败后的强制终止也是这个退出码,必须结合原因与事件区分
  • 只看退出码不看原因字段:两者组合才能定位是资源、探针还是应用自身的问题
  • 忽略上一个实例的日志:应用在被终止前往往已经输出了明确的错误线索
  • 把任务正常完成误判为崩溃:一次性任务正常结束同样会退出,应先确认工作负载类型

数据来源与参考

  • Kubernetes 官方文档 · 容器状态与终止
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌