0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

最常见的退出码介绍

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-08-02 09:57 次阅读

为什么我的容器没有运行?

回答这个问题需要知道 Docker 容器为什么退出,退出码会提示容器停止运行的情况。本文列出了最常见的退出码,来回答两个重要问题:

这些退出码是什么意思?

导致该退出码的动作是什么?

exit code:代表一个进程的返回码,通过系统调用 exit_group 来触发。在 POSIX 中,0 代表正常的返回码,而 1-255 代表异常返回码,不过一般错误码都是 1。这里有一张附表 Appendix E. Exit Codes With Special Meanings

如何查看退出码

方法一:查看 pod 中的容器退出码

$kubectldescribepodxxx

74a515f8-11a5-11ed-ba43-dac502259ad0.jpg

方法二:用 Docker 查看

$ dockerps--filter"status=exited"
$ dockerinspect--format='{{.State.ExitCode}}'

方法三:手动输出

$ dockercontainerrunalpinesh-c"exit1"

$dockercontainerls-a

CONTAINERIDIMAGECOMMANDCREATEDSTATUS
61c688005b3aalpine"sh-c'exit1'"AboutaminuteagoExited(1)3secondsago

常见退出码

Exit Code 0

退出代码0表示特定容器没有附加前台进程。

该退出代码是所有其他后续退出代码的例外。

这不一定意味着发生了不好的事情。如果开发人员想要在容器完成其工作后自动停止其容器,则使用此退出代码。

如果你执行 docker run hello-world, 你会得到“Hello from docker!”,但查看容器的时候docker ps -a | grep hello-world,会发现状态码为 0

74b736d4-11a5-11ed-ba43-dac502259ad0.jpg

Exit Code 1

程序错误,或者 Dockerfile 中引用不存在的文件,如 entrypoint 中引用了错误的包

程序错误可以很简单,例如 “除以0”,也可以很复杂,比如空引用或者其他程序 crash

Exit Code 137

表明容器收到了 SIGKILL 信号,进程被杀掉,对应 kill -9

引发 SIGKILL 的是 Docker Kill。这可以由用户或由 Docker 守护程序来发起,手动执行:docker kill

137 比较常见,如果 pod 中的 limit 资源设置较小,会运行内存不足导致 OOMKilled,此时 state 中的 "OOMKilled" 值为 true,你可以在系统的 dmesg 中看到 oom 日志

Exit Code 139

表明容器收到了 SIGSEGV 信号,无效的内存引用,对应 kill -11

一般是代码有问题,或者 docker 的基础镜像有问题

Exit Code 143

表明容器收到了 SIGTERM 信号,终端关闭,对应 kill -15

一般对应 docker stop 命令

有时 docker stop 也会导致 Exit Code 137。发生在与代码无法处理 SIGTERM 的情况下,docker 进程等待十秒钟然后发出 SIGKILL 强制退出。

不常用的一些 Exit Code

Exit Code 126: 权限问题或命令不可执行

Exit Code 127: Shell 脚本中可能出现错字且字符无法识别的情况

Exit Code 1 或 255:因为很多程序员写异常退出时习惯用 exit(1) 或 exit(-1),-1 会根据转换规则转成 255。这个一般是自定义 code,要看具体逻辑。

退出状态码的区间

必须在 0-255 之间,0 表示正常退出

外界将程序中断退出,状态码在 129-255

程序自身异常退出,状态码一般在 1-128

假如写代码指定的退出状态码时不在 0-255 之间,例如: exit(-1),这时会自动做一个转换,最终呈现的状态码还是会在 0-255 之间。我们把状态码记为 code,当指定的退出时状态码为负数,那么转换公式如下:256 – (|code| % 256)

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    116

    文章

    3773

    浏览量

    80835
  • 容器
    +关注

    关注

    0

    文章

    492

    浏览量

    22041
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68330

原文标题:理解 Docker 容器退出码

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    生产线用条码读介绍

    工业读器是一种专门用于读取各种条码信息的工业设备。在工业应用中,读器经常用于自动识别产品、包装和配件上的编码信息,以支持物料管理、生产计划、物流和配送的自动化。常见的工业条码阅读器包括激光读
    的头像 发表于 08-29 15:50 180次阅读
    生产线用条码读<b class='flag-5'>码</b>器<b class='flag-5'>介绍</b>

    新大陆扫器哪款能够识别DPM?新大陆二维介绍

    随着工业自动化的不断发展,二维和数据矩阵(DPM)在生产、物流和仓储等领域的应用越来越广泛。DPM因其高密度和小体积的特点,常常被应用于金属、塑料等各种材料的直接标记。这就对扫
    的头像 发表于 07-29 14:36 303次阅读
    新大陆扫<b class='flag-5'>码</b>器哪款能够识别DPM<b class='flag-5'>码</b>?新大陆二维<b class='flag-5'>码</b>扫<b class='flag-5'>码</b>器<b class='flag-5'>介绍</b>

    功能测试覆盖中最常见的是什么方法

    功能测试覆盖是软件测试过程中的一个重要环节,它主要关注软件产品的功能实现是否符合需求规格说明。在功能测试覆盖中,有多种方法可以采用,以确保测试的全面性和有效性。本文将详细介绍功能测试覆盖中最常见
    的头像 发表于 05-30 14:55 582次阅读

    PCB板的颜色应该怎么选?为什么绿色最常见

    使用的,更为人熟悉。但是不同的PCB我们应该怎么去选择PCB的颜色呢,为什么绿色更常用呢?1绿色PCB板绿色是最常见的PCB颜色,也是最经济、使用最广泛的选择。这是因为在传
    的头像 发表于 05-10 08:20 837次阅读
    PCB板的颜色应该怎么选?为什么绿色<b class='flag-5'>最常见</b>?

    Ubuntu系统常见问题及解答

    今天小编为大家总结了Ubuntu系统常见问题的解决方法,便于收藏和查阅,大家快快住哦~
    的头像 发表于 04-19 12:29 1012次阅读
    Ubuntu系统<b class='flag-5'>常见</b>问题及解答

    工业制造行业中的DPM识读要如何选择固定读器?

    在工业制造行业中,DPM是一种常见的标识方式,它是将信息直接标记在产品表面上,以便在生产过程中进行追踪和识别。不言而喻,在如今的产品质量追溯管理应用上,需要对多种复杂条码进行识别读取,其中就包括了
    的头像 发表于 03-06 13:52 608次阅读
    工业制造行业中的DPM<b class='flag-5'>码</b>识读要如何选择固定读<b class='flag-5'>码</b>器?

    最常见的发动机怠速抖动问题及原因

    最常见的发动机怠速抖动问题及原因 发动机怠速抖动问题是一种常见的车辆故障,它通常会导致发动机运行不稳定,并伴有抖动感。这种问题可能由多种原因引起,本文将详细介绍最常见的原因及解决办法。
    的头像 发表于 02-02 10:40 3041次阅读

    modbus协议功能分类 modbus协议功能是什么,有什么作用

    Modbus协议是一种用于工业领域常见的通信协议,它基于主从结构,用于在不同设备之间实现数据交换。Modbus协议的功能是决定数据交换类型和操作的重要部分。下面将详细介绍Modbus协议功能
    的头像 发表于 01-31 14:47 6459次阅读

    器种类有多少种类型

    器是一种广泛应用于数字电子电路中的设备,用于将一种制转换为另一种制。根据不同的转换方式和应用场景,变器可以分为多种不同类型。下面将详细介绍
    的头像 发表于 01-19 14:13 616次阅读

    最常见的直流负载工作方式

    最常见的直流负载工作方式  直流负载工作方式是指在直流电路中使用的各种负载方式。直流负载是用于测试和测量直流电源输出能力和能效的设备,可以模拟真实负载条件下的电流和功率需求。本文将详细介绍最常见
    的头像 发表于 01-18 15:12 687次阅读

    GD32 485发送异常最常见原因

    相信有小伙伴们遇到过这样的问题,在使用GD32进行串口485发送的时候,明明发送了特定长度的数据,但从机就是不响应,现在就让我们来解析下最常见的一个原因。
    的头像 发表于 01-16 09:39 1141次阅读
    GD32 485发送异常<b class='flag-5'>最常见</b>原因

    上新!QR扫描单元与迷你称重单元

    二维又称二维条码,常见的二维为QRCode,QR全称QuickResponse,是一种编码方式。它比传统的BarCode条形码(一维)能存更多的信息,也能表示更多的数据类型。在日
    的头像 发表于 12-30 08:29 408次阅读
    上新!QR<b class='flag-5'>码</b>扫描单元与迷你称重单元

    工业镜头常见参数应用介绍

    机器视觉入门必备,工业镜头的常见参数名词介绍
    发表于 12-04 10:09 6次下载

    linux怎么保存退出vim

    在Linux系统中,使用vim作为编辑器是非常常见的。vim是一个强大的文本编辑器,拥有丰富的功能和快捷键。保存并退出vim可以通过以下步骤完成: 打开vim编辑器:在Linux命令行中输入 vim
    的头像 发表于 11-27 14:19 1w次阅读

    精密模拟电路的最常见问题是什么?

    精密模拟电路的最常见问题是什么? 可能是接地错误,不过还有许多其它常见错误。这些主要是疏忽大意造成的,工程师是人不是神,也可能会丢三落四。别忘了以下14条帮助您解决问题的方法哦。 1.
    发表于 11-24 07:29