為什么我的容器沒有運行?
回答這個問題需要知道 Docker 容器為什么退出,退出碼會提示容器停止運行的情況。本文列出了最常見的退出碼,來回答兩個重要問題:
這些退出碼是什么意思?
導致該退出碼的動作是什么?
exit code:代表一個進程的返回碼,通過系統調用 exit_group 來觸發。在 POSIX 中,0 代表正常的返回碼,而 1-255 代表異常返回碼,不過一般錯誤碼都是 1。這里有一張附表 Appendix E. Exit Codes With Special Meanings
如何查看退出碼
方法一:查看 pod 中的容器退出碼
$kubectldescribepodxxx
方法二:用 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
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文章
492瀏覽量
11981 -
docker容器
+關注
關注
0文章
30瀏覽量
3351
發布評論請先 登錄
相關推薦
掃碼設備能識別哪些類型的碼 工業二維碼掃描設備有什么推薦產品
![掃<b class='flag-5'>碼</b>設備能識別哪些類型的<b class='flag-5'>碼</b> 工業二維<b class='flag-5'>碼</b>掃描設備有什么推薦產品](https://file1.elecfans.com/web3/M00/02/EB/wKgZO2didPuAPUcnAADaUrH6Q-Y442.png)
如何使用ASCII碼進行編碼
什么是工業用掃碼設備,工業掃碼器有什么優勢
![什么是工業用掃<b class='flag-5'>碼</b>設備,工業掃<b class='flag-5'>碼</b>器有什么優勢](https://file1.elecfans.com/web2/M00/05/81/wKgaombQKDWAXlLHAABCT1zBc3E090.png)
電容器在運行中電壓超過額定電壓需要退出運行嗎
![電<b class='flag-5'>容器</b>在運行中電壓超過額定電壓需要<b class='flag-5'>退出</b>運行嗎](https://file1.elecfans.com/web2/M00/07/CD/wKgaombryEOAUDlsAAJ7N8bmedo381.jpg)
新大陸掃碼器哪款能夠識別DPM碼?新大陸二維碼掃碼器介紹
![新大陸掃<b class='flag-5'>碼</b>器哪款能夠識別DPM<b class='flag-5'>碼</b>?新大陸二維<b class='flag-5'>碼</b>掃<b class='flag-5'>碼</b>器介紹](https://file1.elecfans.com/web2/M00/00/05/wKgaomanOAeAbM3eAABMs4Wk-UQ408.png)
ARM平臺實現Docker容器技術
固定讀碼器怎么選型 工業二維碼讀碼器推薦
![固定讀<b class='flag-5'>碼</b>器怎么選型 工業二維<b class='flag-5'>碼</b>讀<b class='flag-5'>碼</b>器推薦](https://file1.elecfans.com/web2/M00/F2/4F/wKgZomZ5D5WASVtLAAA7j2i1I4o828.png)
遠距離掃碼模組,用于停車場掃碼
![遠距離掃<b class='flag-5'>碼</b>模組,用于停車場掃<b class='flag-5'>碼</b>](https://file1.elecfans.com/web2/M00/EC/29/wKgZomZhVymABcRBAAC2gaNfklY253.png)
![](https://file1.elecfans.com/web2/M00/E3/47/wKgZomY8YbyASe1xAAv2U4TMGlQ910.jpg)
![](https://file1.elecfans.com/web2/M00/D6/71/wKgZomYnb_KAeLdPAAFHUXKaQvU249.png)
ARM平臺實現Docker容器技術
![ARM平臺實現<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術](https://file1.elecfans.com/web2/M00/C3/DE/wKgaomXpMM2ANlt5AARGmREsrH4588.png)
評論