<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          理解 Docker 容器退出碼

          共 2590字,需瀏覽 6分鐘

           ·

          2022-08-03 16:15

          為什么我的容器沒有運行?

          回答這個問題需要知道 Docker 容器為什么退出,退出碼會提示容器停止運行的情況。本文列出了最常見的退出碼,來回答兩個重要問題:

          • 這些退出碼是什么意思?
          • 導(dǎo)致該退出碼的動作是什么?

          exit code:代表一個進(jìn)程的返回碼,通過系統(tǒng)調(diào)用 exit_group 來觸發(fā)。在 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表示特定容器沒有附加前臺進(jìn)程。
          • 該退出代碼是所有其他后續(xù)退出代碼的例外。
          • 這不一定意味著發(fā)生了不好的事情。如果開發(fā)人員想要在容器完成其工作后自動停止其容器,則使用此退出代碼。

          如果你執(zhí)行 docker run hello-world, 你會得到“Hello from docker!”,但查看容器的時候docker ps -a | grep hello-world,會發(fā)現(xiàn)狀態(tài)碼為 0

          Exit Code 1

          • 程序錯誤,或者 Dockerfile 中引用不存在的文件,如 entrypoint 中引用了錯誤的包
          • 程序錯誤可以很簡單,例如 “除以0”,也可以很復(fù)雜,比如空引用或者其他程序 crash

          Exit Code 137

          • 表明容器收到了 SIGKILL 信號,進(jìn)程被殺掉,對應(yīng) kill -9
          • 引發(fā) SIGKILL 的是 Docker Kill。這可以由用戶或由 Docker 守護(hù)程序來發(fā)起,手動執(zhí)行:docker kill
          • 137 比較常見,如果 pod 中的 limit 資源設(shè)置較小,會運行內(nèi)存不足導(dǎo)致 OOMKilled,此時 state 中的 "OOMKilled" 值為 true,你可以在系統(tǒng)的 dmesg 中看到 oom 日志

          Exit Code 139

          • 表明容器收到了 SIGSEGV 信號,無效的內(nèi)存引用,對應(yīng) kill -11
          • 一般是代碼有問題,或者 docker 的基礎(chǔ)鏡像有問題

          Exit Code 143

          • 表明容器收到了 SIGTERM 信號,終端關(guān)閉,對應(yīng) kill -15
          • 一般對應(yīng) docker stop  命令
          • 有時 docker stop 也會導(dǎo)致 Exit Code 137。發(fā)生在與代碼無法處理 SIGTERM 的情況下,docker 進(jìn)程等待十秒鐘然后發(fā)出 SIGKILL 強(qiáng)制退出。

          不常用的一些 Exit Code

          • Exit Code 126: 權(quán)限問題或命令不可執(zhí)行
          • Exit Code 127: Shell 腳本中可能出現(xiàn)錯字且字符無法識別的情況
          • Exit Code 1 或 255:因為很多程序員寫異常退出時習(xí)慣用 exit(1) 或 exit(-1),-1 會根據(jù)轉(zhuǎn)換規(guī)則轉(zhuǎn)成 255。這個一般是自定義 code,要看具體邏輯。

          退出狀態(tài)碼的區(qū)間

          • 必須在 0-255 之間,0 表示正常退出
          • 外界將程序中斷退出,狀態(tài)碼在 129-255
          • 程序自身異常退出,狀態(tài)碼一般在 1-128
          • 假如寫代碼指定的退出狀態(tài)碼時不在 0-255 之間,例如: exit(-1),這時會自動做一個轉(zhuǎn)換,最終呈現(xiàn)的狀態(tài)碼還是會在 0-255 之間。我們把狀態(tài)碼記為 code,當(dāng)指定的退出時狀態(tài)碼為負(fù)數(shù),那么轉(zhuǎn)換公式如下:256 – (|code| % 256)

          參考

          • http://tldp.org/LDP/abs/html/exitcodes.html
          • https://imroc.io/posts/kubernetes/analysis-exitcode/
          • https://medium.com/better-programming/understanding-docker-container-exit-codes-5ee79a1d58f6

          鏈接:http://www.xuyasong.com/?p=1802

          (版權(quán)歸原作者所有,侵刪)

          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲AV成人无码www在线观看 | 北条麻妃操逼片 | 色播影院怡红院 | 亚洲第一不卡 | 成人Av影院三级片 |