自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

理解 Docker 容器退出碼

系統(tǒng) Linux
本文列出了最常見的退出碼,來(lái)回答兩個(gè)重要問(wèn)題。來(lái)看一下吧。

為什么我的容器沒(méi)有運(yùn)行?

回答這個(gè)問(wèn)題需要知道 Docker 容器為什么退出,退出碼會(huì)提示容器停止運(yùn)行的情況。

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

exit code:代表一個(gè)進(jìn)程的返回碼,通過(guò)系統(tǒng)調(diào)用 exit_group 來(lái)觸發(fā)。在 POSIX 中,0 代表正常的返回碼,而 1-255 代表異常返回碼,不過(guò)一般錯(cuò)誤碼都是 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}}'

方法三:手動(dòng)輸出

$ 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表示特定容器沒(méi)有附加前臺(tái)進(jìn)程。
  • 該退出代碼是所有其他后續(xù)退出代碼的例外。
  • 這不一定意味著發(fā)生了不好的事情。如果開發(fā)人員想要在容器完成其工作后自動(dòng)停止其容器,則使用此退出代碼。

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

Exit Code 1

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

Exit Code 137

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

Exit Code 139

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

Exit Code 143

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

不常用的一些 Exit Code

  • Exit Code 126: 權(quán)限問(wèn)題或命令不可執(zhí)行
  • Exit Code 127: Shell 腳本中可能出現(xiàn)錯(cuò)字且字符無(wú)法識(shí)別的情況
  • Exit Code 1 或 255:因?yàn)楹芏喑绦騿T寫異常退出時(shí)習(xí)慣用 exit(1) 或 exit(-1),-1 會(huì)根據(jù)轉(zhuǎn)換規(guī)則轉(zhuǎn)成 255。這個(gè)一般是自定義 code,要看具體邏輯。

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

  • 必須在 0-255 之間,0 表示正常退出
  • 外界將程序中斷退出,狀態(tài)碼在 129-255
  • 程序自身異常退出,狀態(tài)碼一般在 1-128
  • 假如寫代碼指定的退出狀態(tài)碼時(shí)不在 0-255 之間,例如: exit(-1),這時(shí)會(huì)自動(dòng)做一個(gè)轉(zhuǎn)換,最終呈現(xiàn)的狀態(tài)碼還是會(huì)在 0-255 之間。我們把狀態(tài)碼記為 code,當(dāng)指定的退出時(shí)狀態(tài)碼為負(fù)數(shù),那么轉(zhuǎn)換公式如下:256 – (|code| % 256)
責(zé)任編輯:龐桂玉 來(lái)源: 奇妙的Linux世界
相關(guān)推薦

2021-07-15 09:47:20

Docker容器命令

2024-03-04 07:47:06

KubernetesUnix系統(tǒng)

2024-03-08 15:29:01

DockerUIDGID

2023-08-03 17:08:05

Linux退出碼

2019-07-24 08:49:36

Docker容器鏡像

2022-04-24 10:42:59

Kubernete容器網(wǎng)絡(luò)Linux

2022-03-10 08:24:17

Docker容器SaaS

2019-07-16 14:44:52

DockerMySQL操作系統(tǒng)

2023-12-18 09:31:35

Go容器Linux

2022-07-18 11:13:07

容器安全Docker

2024-10-15 09:10:41

Docker容器iOS

2022-07-25 14:24:53

Docker容器安全

2019-07-01 09:33:58

DockerNginx操作系統(tǒng)

2014-11-20 10:55:47

Docker容器技術(shù)虛擬化

2016-08-23 09:16:46

Docker鏡像容器

2023-05-30 14:56:18

Docker開發(fā)容器

2023-09-08 00:02:47

2019-12-16 12:11:53

Docker容器Kubernetes

2023-12-14 15:51:15

2015-08-19 14:54:25

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)