<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Docker容器退出碼是什么意思?導致該退出碼的動作是什么

馬哥Linux運維 ? 來源:徐亞松(占洋) ? 作者:徐亞松(占洋) ? 2022-08-02 09:55 ? 次閱讀

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

回答這個問題需要知道 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)



審核編輯:劉清


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Docker
    +關注

    關注

    0

    文章

    439

    瀏覽量

    11640
  • docker容器
    +關注

    關注

    0

    文章

    28

    瀏覽量

    3291
收藏 人收藏

    評論

    相關推薦

    模塊 DPM工業掃

    模組
    深圳市遠景達物聯網技術有限公司
    發布于 :2024年04月23日 16:23:25

    STM32調試進入低功耗而沒有退出,如何解決?

    STM32調試遇到如圖問題,大意是進入低功耗而沒有退出,請教大神們如何解決?
    發表于 03-22 07:52

    docker容器有幾種狀態

    Docker 是一種流行的容器化平臺,它能夠幫助開發人員將應用程序和其依賴打包成一個獨立的容器,并且能夠在不同的環境中進行部署和運行。在 Docker 中,
    的頭像 發表于 11-23 09:50 ?965次閱讀

    docker進入容器的方法有哪些

    Docker是一種流行的容器化平臺,它能夠快速構建、交付和運行應用程序。在使用Docker時,我們經常需要進入容器進行調試、管理和運行命令等操作。本文將詳細介紹
    的頭像 發表于 11-23 09:45 ?4540次閱讀

    docker容器容器之間通信

    Docker是一種輕量級容器化技術,能夠將應用程序及其依賴項封裝在一個獨立、可移植的容器中。而容器化的應用程序通常是以分布式方式設計的,因此實現容器
    的頭像 發表于 11-23 09:36 ?617次閱讀

    docker容器刪除后數據還在嗎

    Docker作為一個容器化平臺,提供了輕量級的虛擬化解決方案,能夠方便地創建、部署和管理應用程序。然而,對于Docker容器的數據持久性是一個令人關注的問題。當我們刪除一個
    的頭像 發表于 11-23 09:32 ?792次閱讀

    JDK如何優雅退出一個線程?

    需要線程退出的常見場景 任務執行完成,或異常終止,任務認為無需再占用線程。 線程池根據當前任務執行情況,伸縮線程池。當任務執行較少時,退出空閑的線程。 服務或進程在關閉階段,例如滾動
    的頭像 發表于 11-17 10:02 ?268次閱讀
    JDK如何優雅<b class='flag-5'>退出</b>一個線程?

    1000MW機組高加退出對機組的影響

    高加退出是火電廠常見事故,特別是單列高加退出,對機組協調控制系統及主要參數的擾動比較大。若處理不當,可能導致超溫、超壓、擴大事故等嚴重后果。結合某1 000 MW機組單列高加退出過程,
    的頭像 發表于 11-13 15:58 ?1266次閱讀
    1000MW機組高加<b class='flag-5'>退出</b>對機組的影響

    使用Docker容器編譯OK3568源代碼

    經常編譯系統,又免不了搭建各種開發環境,所以為了不對開發主機的環境有影響,使用Docker容器編譯代碼是比較方便和省心的方式。 編譯OK3568的源代碼,需要用Ubunut 18.04版本,我的開發
    發表于 10-19 10:36

    如何使用 Docker容器化技術

    對于開發人員來說,Docker肯定都不陌生,今天小編帶大家重新學習一下Docker。 什么是 Docker 官話: Docker 是一種開源的容器
    的頭像 發表于 09-30 11:24 ?1.2w次閱讀

    OOM會導致JVM虛擬機退出

    熟悉Java開發的人,應該會經常遇到的異常:OOM,那么這個異常會導致 JVM 虛擬機退出嗎? 1、結論 Java虛擬機(JVM)在運行Java應用時,可能會遇到內存不足的情況,從而拋出
    的頭像 發表于 09-30 10:14 ?522次閱讀

    線路充電時為什么退出主一保護?

    線路充電時為什么退出主一保護? 在充電時,有時候會出現退出主一保護的情況,這是因為線路充電時遇到了某些問題,導致了電池出現了異常情況,為了保護電池和設備安全,充電器通過檢測到異常信號自動退出
    的頭像 發表于 09-27 16:10 ?486次閱讀

    如何判斷是否在docker鏡像中?

    /issue 可以發現兩者區別。 還有一個方法,就是修改主機名: 因為 docker 創建使用的是 host 模式,所以需要創建完 docker 容器后,退出,在云主機上修改: # 已
    發表于 09-20 07:42

    docker基礎知識和使用bmnnsdk時的docker常用命令

    ./docker_run_bmnnsdk.sh 添加命名docker image:--name=yourname,運行腳本文件,之后可以重復使用容器,省去一些重復初始化
    發表于 09-18 07:59

    Docker容器和Kubernetes退出碼中文指南

    容器終止時,容器引擎使用退出碼來報告容器終止的原因。如果您是 Kubernetes 用戶,容器故障是 pod 異常最常見的原因之一,了解
    發表于 06-06 10:08 ?195次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>