Docker容器的退出狀態碼及解決方法

Shadow Flow發表於2020-12-17

容器內應用啟動異常, 導致容器很快就結束或者構建映象時失敗了等問題

  • 會出現的情況:

    1. 容器處於Exited異常退出時,將無法用docker exec進入容器內,會提示該容器不在執行中
    2. docker log顯示的錯誤無法在外部進行修改
  • 解決的方法

    1.「docker ps -a」檢視當前容器狀態,對應Exited狀態碼的含義

狀態碼描述
0表示正常退出
非 0表示異常退出(退出狀態碼採用 chroot 標準)
125Docker 守護程式本身的錯誤
126容器啟動後,要執行的預設命令無法呼叫
127容器啟動後,要執行的預設命令不存在
137表明容器收到了 SIGKILL 訊號,程式被殺掉,對應kill -9
139表明容器收到了 SIGSEGV 訊號,無效的記憶體引用,對應kill -11
143表明容器收到了 SIGTERM 訊號,終端關閉,對應kill -15

在這裡插入圖片描述

  1. 「docker inspect」檢視當前state,確認是否與OOMKilled等有關

  2. 根據dockerfile中使用的引數來重新啟動容器,若為CMD,則在docker run的時候在後面加入命令列引數,覆蓋掉CMD內容;如果是ENTRYPOINT,在docker run後加上“–entrypoint”覆蓋掉dockerfile中ENTRYPOINT的內容,進入新的容器內進行除錯

  3. 如果是配置檔案類等錯誤,可以用「docker cp」將容器內錯誤的配置檔案拷貝到本機上,修改後再重新拷貝回去,然後「docker start」重新執行容器

重啟策略

字元描述
no預設策略,在容器退出時不重啟容器
no-failure在容器非正常退出時(退出狀態非 0),才會重啟容器
no-failure:3在容器非正常退出時重啟容器,最多重啟 3 次
always在容器退出時總是重啟容器
unless-stopped在容器退出時總是重啟容器,但不考慮在 docker 守護程式啟動時就已經停止了的容器

相關文章