当前位置: 首页 > news >正文

了解Docker容器的常见退出状态码及其含义

了解Docker容器退出状态码可以帮助我们:

  • 快速定位问题:通过状态码快速判断容器的退出原因,如命令权限不足(126)、命令未找到(127)等。
  • 优化容器配置:根据状态码调整资源分配或优化代码,如内存不足导致的终止(137)。
  • 提高故障排查效率:通过状态码判断容器是否因信号终止(如137、143),从而更有效地调试。
  • 增强系统稳定性:通过监控状态码及时发现潜在问题,提高系统的稳定性和可靠性。
  • 提升自动化部署和监控能力:在CI/CD和监控系统中,利用状态码作为判断依据,确保容器的正常运行。
  1. 状态码介绍

    状态码含义
    0容器运行一个简单的脚本并成功完成
    1容器运行的Python脚本存在语法错误
    125docker run命令未成功执行
    126容器中的命令无法被调用,如命令权限不足
    127容器中的命令未找到,如命令路径错误或拼写错误
    137容器被手动终止或因内存不足被系统终止
    139容器尝试访问未分配给它的内存
    143容器被手动终止,如使用docker stop命令
    255容器退出时返回的退出码超出有效范围
  2. 复现这些状态码

    2.1. 容器内进程运行成功后退出返回 0

     [root@kvm-server ~]# docker run --name test ubuntu echo success
     success
     [root@kvm-server ~]# docker inspect --format='{{.State.ExitCode}}' test
     0
    

    2.2. 容器运行的Python脚本存在语法错误 退出返回 1
    准备一个python脚本

    # cat app.py
    import os
    
    # 尝试读取一个必需的环境变量
    database_url = os.environ['DATABASE_URL']
    
    print(f"Connecting to database: {database_url}")
    print("Application running...")
    
     [root@kvm-server ExitCode]# docker run --name test -v $PWD/app.py:/app.py  python:3.9-slim   python app.py
     Traceback (most recent call last):
       File "//app.py", line 4, in <module>
         database_url = os.environ['DATABASE_URL']
       File "/usr/local/lib/python3.9/os.py", line 679, in __getitem__
         raise KeyError(key) from None
     KeyError: 'DATABASE_URL'
     [root@kvm-server ExitCode]# docker inspect --format='{{.State.ExitCode}}' test
     1
    

    shell脚本语法问题的退出码是 2

    # cat test.sh
    #!/bin/bash
    
    if true; then
            echo success
    if
    
     [root@kvm-server ExitCode]# docker run --name test -v $PWD/test.sh:/test.sh ubuntu bash /test.sh
     /test.sh: line 6: syntax error: unexpected end of file
     [root@kvm-server ExitCode]# docker inspect --format='{{.State.ExitCode}}' test
     2
    

    2.3. docker run命令未成功执行返回 125

     [root@kvm-server ExitCode]# docker run --neme test ubuntu echo ; echo $?
     unknown flag: --neme
     See 'docker run --help'.
     125
    

    2.4. 容器中的命令无法被调用,如命令权限不足 返回 126

    如下,当前脚本无执行权限,容器中使用 . 执行脚本。
    [root@kvm-server ExitCode]# ll test.sh
    -rw-r–r-- 1 root root 44 Apr 3 01:13 test.sh

     # docker run --name test -v $PWD/test.sh:/test.sh  ubuntu  ./test.sh
     docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./test.sh": permission denied: unknown.
     [root@kvm-server ExitCode]# docker inspect --format='{{.State.ExitCode}}' test
     126
    

    2.5. 容器中的命令未找到,如命令路径错误或拼写错误 返回 127

     [root@kvm-server ExitCode]# docker run --name test   ubuntu  ech succes
     docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "ech": executable file not found in $PATH: unknown.
     [root@kvm-server ExitCode]# docker inspect --format='{{.State.ExitCode}}' test
     127
    

    2.6. 容器被手动终止或因内存不足被系统终止 返回 137

    被手动kill情况

     [root@kvm-server ExitCode]# docker   run -itd --name test   ubuntu   bash
     dbf8a5126e6a9a52529f20d2cc72b9d4f03026c61f8e53549c4f13b32703ed5a
     [root@kvm-server ExitCode]# docker kill test
     test
     [root@kvm-server ExitCode]# docker inspect --format='{{.State.ExitCode}}' test
     137
    

    2.7. 容器被手动终止,如使用docker stop命令 返回 143

    即像容器发送 SIGTERM 信号,如果程序无法处理SIGTERM 则等待10秒后会被SIGKILL 掉,并返回137。

    编写一个脚本,用于捕获SIGTERM,退出并返回 143代码。

    # cat test.sh
    #!/bin/bash
    trap 'echo "SIGTERM received, exiting..." ; exit 143' SIGTERM
    while true; do
        sleep 1
    done
    
     [root@kvm-server ExitCode]# docker run -d --name test -v $PWD/test.sh:/test.sh  ubuntu bash /test.sh
     a216af36992cc276b1e05f94681bb3e44a56be82f2b65a2b06f1a8e1944c45b1
     [root@kvm-server ExitCode]# docker stop test
     test
     [root@kvm-server ExitCode]# docker inspect --format='{{.State.ExitCode}}' test
     143
    

相关文章:

  • 做关键词优化需要修改网站标题廊坊关键词排名优化
  • 网站建设总体目标沈阳网络seo公司
  • 昌做网站东莞寮步最新通知
  • 成都今日疫情增加seo网站推广批发
  • 淘宝站外引流推广方法企业网络推广的方式有哪些
  • 服装购物网站策划书如何在百度上发自己的广告?
  • dify新版本1.1.3的一些问题
  • 生成对抗网络(GAN)详解(代码实现)
  • MySQL 中的 MVCC 版本控制机制原理
  • PCIe初始化Detect状态解读
  • 32f4,usart2fifo,2025
  • 【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器
  • 模版进阶(沉淀中)
  • 云原生安全渗透篇
  • 让AI再次伟大-MCP-Client开发指南
  • strace命令详解
  • .NET用C#在PDF文档中添加、删除和替换图片
  • InfluxDB用户管理全攻略:从入门到精通
  • C++ 继承方式使用场景(极简版)
  • fastGPT—nextjs—mongoose—团队管理之部门相关api接口实现
  • 当系统会“说话“:用人类能听懂的方式聊聊Syslog和Kafka
  • 【MongoDB + 向量搜索引擎】MongoDB Atlas 向量搜索 提供全托管解决方案
  • Docker自动部署Spring Boot项目的Shell脚本
  • Caddy 从入门到实战指南(一)
  • 鸿蒙NEXT小游戏开发:井字棋
  • Java学习总结-io流-字节流