首页 > 其他分享 >k8s--docker状态码

k8s--docker状态码

时间:2022-11-09 09:12:20浏览次数:56  
标签:Code -- Exit 退出 exit docker k8s 255

最常见的退出码,来回答两个重要问题:
这些退出码是什么意思?
导致该退出码的动作是什么?
exit code:代表一个进程的返回码,通过系统调用 exit_group 来触发。在 POSIX 中,0 代表正常的返回码,而 1-255 代表异常返回码,不过一般错误码都是 1。这里有一张附表 Appendix E. Exit Codes With Special Meanings

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

kubectl describe pod xxx

方法二:用 Docker 查看

docker ps --filter "status=exited"
docker inspect <container-id> --format='{{.State.ExitCode}}'
方法三:手动输出

docker container run alpine sh -c "exit 1"

docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
61c688005b3a alpine "sh -c 'exit 1'" About a minute ago Exited (1) 3 seconds ago
二、常见退出码
Exit Code 0
退出代码0表示特定容器没有附加前台进程。
该退出代码是所有其他后续退出代码的例外。

这不一定意味着发生了不好的事情。如果开发人员想要在容器完成其工作后自动停止其容器,则使用此退出代码。
如果你执行 docker run hello-world, 你会得到“Hello from docker!”,但查看容器的时候docker ps -a | grep hello-world,会发现状态码为 0

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)

标签:Code,--,Exit,退出,exit,docker,k8s,255
From: https://www.cnblogs.com/zbhlinux/p/16872416.html

相关文章

  • Linux包管理学习
    删除rc状态的包:ubuntu下,用apt-getremove某个软件包后,用dpkg-l查看,有些包变成rc状态rc状态的意思是:r:thepackageismarkedforremoval.c:theconfigurationf......
  • Vue 数组中出现__ob__: Observer无法取值
    问题说明在开发项目中经常要从数据库中拿到数组然后复制给新的数组使用,但是会发现有时候会发现带有 __ob__:Observer 数组后缀的就是没有办法取到值,更可怕的是 consol......
  • python3执行pip list出现警告
    python3执行piplist出现警告WARNING:Youareusingpipversion21.2.3;however,version22.3.1isavailable.Youshouldconsiderupgradingviathe'F:\Python39......
  • JavaaWeb中对request,session,application的理解
    注意!无论是request,session,application必须先调用setAttribute得到保存作用域中保存数据request:一次请求响应范围@WebServlet("/demo01")publicclassDemo01Servlet......
  • 使用jwt鉴权(jsonwebtoken)
    1.下载jsonwebtokennpmi-Sjsonwebtoken2.引用constjwt=require('jsonwebtoken');3.需要设置秘钥constsecretKey='3.14159263528542852651268541';4.设......
  • C++友元
    友元可以是一个函数,函数模板或成员函数,或类或类模板,在这种情况下,整个类及其所有成员都是友元。参考文章,c++友元函数友元函数、友元类、友元成员函数参考文章,友元函数和......
  • 传输层的协议(三次牵手四次挥手)
    传输层协议中的TCP与UDP   一、TCP与UDP协议介绍       1.TCP协议       2.UDP协议   二、TCP报文格式       TCP报文段       ......
  • 前端零配置打包工具 parceljs 体验
    参考https://www.parceljs.cn/getting_started.htmlparceljs中文官网https://www.parceljs.cn/getting_started.htmlParcel1版本的中文文档https://v2.parceljs.cn......
  • go excelize 批量写入数据到Excel
    funcCreateXlS(data[][]string,fileNamestring,headerNameArray[]string){f:=excelize.NewFile()sheetName:="sheet1"sheetWords:=[]strin......
  • 【java技术总结】java-8新特性:Optional
    Optional类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional是个容器:它可以保存类型T的值,或者仅仅保存null。O......