图文详解 (Kubernetes)K8S 和 容器中的退出状态码含义和原因及解决方法。
什么是容器退出码
当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本原因。
以下是容器使用的最常见的退出码:
退出码 名称 含义
0 正常退出 开发者用来表明容器是正常退出
1 应用错误 容器因应用程序错误或镜像规范中的错误引用而停止
125 容器未能运行 docker run 命令没有执行成功
126 命令调用错误 无法调用镜像中指定的命令
127 找不到文件或目录 找不到镜像中指定的文件或目录
128 退出时使用的参数无效 退出是用无效的退出码触发的(有效代码是 0-255 之间的整数)
134 异常终止 (SIGABRT) 容器使用 abort() 函数自行中止
137 立即终止 (SIGKILL) 容器被操作系统通过 SIGKILL 信号终止
139 分段错误 (SIGSEGV) 容器试图访问未分配给它的内存并被终止
143 优雅终止 (SIGTERM) 容器收到即将终止的警告,然后终止
255 退出状态超出范围 容器退出,返回可接受范围之外的退出代码,表示错误原因未知
下面我们将解释如何在宿主机和 Kubernetes 中对失败的容器进行故障排除,并提供有关上面列出的所有退出代码的更多详细信息。
容器生命周期
为了更好地理解容器故障的原因,让我们先讨论容器的生命周期。以 Docker 为例 —— 在任何给定时间&#