0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

最常見的退出碼介紹

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 作者:馬哥Linux運維 ? 2022-08-02 09:57 ? 次閱讀

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

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

這些退出碼是什么意思?

導致該退出碼的動作是什么?

exit code:代表一個進程的返回碼,通過系統(tǒng)調(diào)用 exit_group 來觸發(fā)。在 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表示特定容器沒有附加前臺進程。

該退出代碼是所有其他后續(xù)退出代碼的例外。

這不一定意味著發(fā)生了不好的事情。如果開發(fā)人員想要在容器完成其工作后自動停止其容器,則使用此退出代碼。

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

74b736d4-11a5-11ed-ba43-dac502259ad0.jpg

Exit Code 1

程序錯誤,或者 Dockerfile 中引用不存在的文件,如 entrypoint 中引用了錯誤的包

程序錯誤可以很簡單,例如 “除以0”,也可以很復雜,比如空引用或者其他程序 crash

Exit Code 137

表明容器收到了 SIGKILL 信號,進程被殺掉,對應 kill -9

引發(fā) SIGKILL 的是 Docker Kill。這可以由用戶或由 Docker 守護程序來發(fā)起,手動執(zhí)行:docker kill

137 比較常見,如果 pod 中的 limit 資源設置較小,會運行內(nèi)存不足導致 OOMKilled,此時 state 中的 "OOMKilled" 值為 true,你可以在系統(tǒng)的 dmesg 中看到 oom 日志

Exit Code 139

表明容器收到了 SIGSEGV 信號,無效的內(nèi)存引用,對應 kill -11

一般是代碼有問題,或者 docker 的基礎鏡像有問題

Exit Code 143

表明容器收到了 SIGTERM 信號,終端關閉,對應 kill -15

一般對應 docker stop 命令

有時 docker stop 也會導致 Exit Code 137。發(fā)生在與代碼無法處理 SIGTERM 的情況下,docker 進程等待十秒鐘然后發(fā)出 SIGKILL 強制退出。

不常用的一些 Exit Code

Exit Code 126: 權限問題或命令不可執(zhí)行

Exit Code 127: Shell 腳本中可能出現(xiàn)錯字且字符無法識別的情況

Exit Code 1 或 255:因為很多程序員寫異常退出時習慣用 exit(1) 或 exit(-1),-1 會根據(jù)轉換規(guī)則轉成 255。這個一般是自定義 code,要看具體邏輯。

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

必須在 0-255 之間,0 表示正常退出

外界將程序中斷退出,狀態(tài)碼在 129-255

程序自身異常退出,狀態(tài)碼一般在 1-128

假如寫代碼指定的退出狀態(tài)碼時不在 0-255 之間,例如: exit(-1),這時會自動做一個轉換,最終呈現(xiàn)的狀態(tài)碼還是會在 0-255 之間。我們把狀態(tài)碼記為 code,當指定的退出時狀態(tài)碼為負數(shù),那么轉換公式如下:256 – (|code| % 256)

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 程序
    +關注

    關注

    116

    文章

    3762

    瀏覽量

    80757
  • 容器
    +關注

    關注

    0

    文章

    492

    瀏覽量

    22027
  • 代碼
    +關注

    關注

    30

    文章

    4723

    瀏覽量

    68237

原文標題:理解 Docker 容器退出碼

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    生產(chǎn)線用條碼讀介紹

    工業(yè)讀器是一種專門用于讀取各種條碼信息的工業(yè)設備。在工業(yè)應用中,讀器經(jīng)常用于自動識別產(chǎn)品、包裝和配件上的編碼信息,以支持物料管理、生產(chǎn)計劃、物流和配送的自動化。常見的工業(yè)條碼閱讀器包括激光讀
    的頭像 發(fā)表于 08-29 15:50 ?163次閱讀
    生產(chǎn)線用條碼讀<b class='flag-5'>碼</b>器<b class='flag-5'>介紹</b>

    新大陸掃器哪款能夠識別DPM?新大陸二維介紹

    隨著工業(yè)自動化的不斷發(fā)展,二維和數(shù)據(jù)矩陣(DPM)在生產(chǎn)、物流和倉儲等領域的應用越來越廣泛。DPM因其高密度和小體積的特點,常常被應用于金屬、塑料等各種材料的直接標記。這就對掃
    的頭像 發(fā)表于 07-29 14:36 ?275次閱讀
    新大陸掃<b class='flag-5'>碼</b>器哪款能夠識別DPM<b class='flag-5'>碼</b>?新大陸二維<b class='flag-5'>碼</b>掃<b class='flag-5'>碼</b>器<b class='flag-5'>介紹</b>

    功能測試覆蓋中最常見的是什么方法

    功能測試覆蓋是軟件測試過程中的一個重要環(huán)節(jié),它主要關注軟件產(chǎn)品的功能實現(xiàn)是否符合需求規(guī)格說明。在功能測試覆蓋中,有多種方法可以采用,以確保測試的全面性和有效性。本文將詳細介紹功能測試覆蓋中最常見
    的頭像 發(fā)表于 05-30 14:55 ?534次閱讀

    PCB板的顏色應該怎么選?為什么綠色最常見?

    使用的,更為人熟悉。但是不同的PCB我們應該怎么去選擇PCB的顏色呢,為什么綠色更常用呢?1綠色PCB板綠色是最常見的PCB顏色,也是最經(jīng)濟、使用最廣泛的選擇。這是因為在傳
    的頭像 發(fā)表于 05-10 08:20 ?802次閱讀
    PCB板的顏色應該怎么選?為什么綠色<b class='flag-5'>最常見</b>?

    最常見的發(fā)動機怠速抖動問題及原因

    最常見的發(fā)動機怠速抖動問題及原因 發(fā)動機怠速抖動問題是一種常見的車輛故障,它通常會導致發(fā)動機運行不穩(wěn)定,并伴有抖動感。這種問題可能由多種原因引起,本文將詳細介紹最常見的原因及解決辦法。
    的頭像 發(fā)表于 02-02 10:40 ?3032次閱讀

    modbus協(xié)議功能分類 modbus協(xié)議功能是什么,有什么作用

    Modbus協(xié)議是一種用于工業(yè)領域常見的通信協(xié)議,它基于主從結構,用于在不同設備之間實現(xiàn)數(shù)據(jù)交換。Modbus協(xié)議的功能是決定數(shù)據(jù)交換類型和操作的重要部分。下面將詳細介紹Modbus協(xié)議功能
    的頭像 發(fā)表于 01-31 14:47 ?6356次閱讀

    器種類有多少種類型

    器是一種廣泛應用于數(shù)字電子電路中的設備,用于將一種制轉換為另一種制。根據(jù)不同的轉換方式和應用場景,變器可以分為多種不同類型。下面將詳細介紹
    的頭像 發(fā)表于 01-19 14:13 ?600次閱讀

    最常見的直流負載工作方式

    最常見的直流負載工作方式? 直流負載工作方式是指在直流電路中使用的各種負載方式。直流負載是用于測試和測量直流電源輸出能力和能效的設備,可以模擬真實負載條件下的電流和功率需求。本文將詳細介紹最常見
    的頭像 發(fā)表于 01-18 15:12 ?670次閱讀

    GD32 485發(fā)送異常最常見原因

    相信有小伙伴們遇到過這樣的問題,在使用GD32進行串口485發(fā)送的時候,明明發(fā)送了特定長度的數(shù)據(jù),但從機就是不響應,現(xiàn)在就讓我們來解析下最常見的一個原因。
    的頭像 發(fā)表于 01-16 09:39 ?1122次閱讀
    GD32 485發(fā)送異常<b class='flag-5'>最常見</b>原因

    上新!QR掃描單元與迷你稱重單元

    二維又稱二維條碼,常見的二維為QRCode,QR全稱QuickResponse,是一種編碼方式。它比傳統(tǒng)的BarCode條形碼(一維)能存更多的信息,也能表示更多的數(shù)據(jù)類型。在日
    的頭像 發(fā)表于 12-30 08:29 ?401次閱讀
    上新!QR<b class='flag-5'>碼</b>掃描單元與迷你稱重單元

    工業(yè)鏡頭常見參數(shù)應用介紹

    機器視覺入門必備,工業(yè)鏡頭的常見參數(shù)名詞介紹
    發(fā)表于 12-04 10:09 ?6次下載

    精密模擬電路的最常見問題是什么?

    精密模擬電路的最常見問題是什么? 可能是接地錯誤,不過還有許多其它常見錯誤。這些主要是疏忽大意造成的,工程師是人不是神,也可能會丟三落四。別忘了以下14條幫助您解決問題的方法哦。 1.
    發(fā)表于 11-24 07:29

    JDK如何優(yōu)雅退出一個線程?

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

    反激式電源中最常見的噪聲來源

    電子發(fā)燒友網(wǎng)站提供《反激式電源中最常見的噪聲來源.doc》資料免費下載
    發(fā)表于 11-15 10:34 ?1次下載
    反激式電源中<b class='flag-5'>最常見</b>的噪聲來源

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

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