Docker 容器健康檢查


Docker 容器健康檢查指的是在 Dockerfile 中使用 HEALTHCHECK 指令對容器的運行狀態進行檢查,
並在 docker ps 的 STATUS 欄顯示 healthy/unhealthy。

HEALTHCHECK 指令有兩種格式:

  • HEALTHCHECK [OPTIONS] CMD command(通過在容器內運行命令檢查容器的健康狀態)
  • HEALTHCHECK NONE(禁用從基礎鏡像中繼承任何健康檢查)

HEALTHCHECK 指令告訴 Docker 如何測試一個容器,以檢查它是否仍在工作。
這可以檢測到一些情況,例如 web 服務器陷入無限循環,無法處理新的連接,即使服務器進程仍在運行。

當容器指定了健康檢查時,除了正常狀態外,它還具有健康狀態。此狀態初始為 starting
只要健康檢查通過,它就會恢復到 healthy(無論它以前處於什么狀態)。在連續失敗一定次數后,它就會變得 unhealthy

CMD 之前可以出現的選項有:

  • --interval=DURATION(默認:30s)
  • --timeout=DURATION(默認:30s)
  • --start-period=DURATION(默認:0s)
  • --retries=N(默認:3)

運行狀態檢查首先會在容器啟動后的 interval 秒內運行,然后在前一次檢查完成后的 interval 秒內再次運行。

如果一次狀態檢查花費的時間超過 timeout 秒,則認為這次檢查失敗。

容器的運行狀態檢查連續失敗 retries 次才會被視為不健康。

start period 為需要時間啟動的容器提供初始化時間。在此期間的探測失敗將不計入最大重試次數。
但是,如果在啟動期間健康檢查成功,則認為容器已啟動,所有連續失敗的情況都將計算到最大重試次數。

Dockerfile 中只能有一個 HEALTHCHECK 指令。如果列出多個,則只有最后一個 HEALTHCHECK 才會生效。

CMD 關鍵字后面的命令可以是 shell 命令(例如 HEALTHCHECK CMD /bin/check-running)或 exec 數組(與其他 Dockerfile 命令一樣,有關詳細信息,請參見 ENTRYPOINT)。

command 的退出狀態表示容器的健康狀態。可能的值是:

  • 0:成功--容器運行良好,可以使用
  • 1:不健康—-容器不能正常工作
  • 2:保留--不使用此退出碼

例如,每五分鍾左右檢查一次 web 服務器是否能在三秒內為站點的主頁提供服務:

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

為了幫助調試失敗的探測,command 寫在 stdout 或 stderr 上的任何輸出文本(UTF-8編碼)都將存儲在健康狀態中,並且可以通過 docker inspect 進行查詢。
這樣的輸出應該保持簡短(目前只存儲前4096個字節)。

當容器的健康狀態發生變化時,將生成一個具有新狀態的 health_status 事件。

原文鏈接:https://k8scat.com/posts/docker-container-healthcheck/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM