Docker 容器健康檢查

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

HEALTHCHECK 指令有兩種格式:docker

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

HEALTHCHECK 指令告訴 Docker 如何測試一個容器,以檢查它是否仍在工做。
這能夠檢測到一些狀況,例如 web 服務器陷入無限循環,沒法處理新的鏈接,即便服務器進程仍在運行。shell

當容器指定了健康檢查時,除了正常狀態外,它還具備健康狀態。此狀態初始爲 starting
只要健康檢查經過,它就會恢復到 healthy(不管它之前處於什麼狀態)。在連續失敗必定次數後,它就會變得 unhealthy數組

CMD 以前能夠出現的選項有:服務器

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

運行狀態檢查首先會在容器啓動後的 interval 秒內運行,而後在前一次檢查完成後的 interval 秒內再次運行。curl

若是一次狀態檢查花費的時間超過 timeout 秒,則認爲此次檢查失敗。post

容器的運行狀態檢查連續失敗 retries 次纔會被視爲不健康。測試

start period 爲須要時間啓動的容器提供初始化時間。在此期間的探測失敗將不計入最大重試次數。
可是,若是在啓動期間健康檢查成功,則認爲容器已啓動,全部連續失敗的狀況都將計算到最大重試次數。編碼

Dockerfile 中只能有一個 HEALTHCHECK 指令。若是列出多個,則只有最後一個 HEALTHCHECK 纔會生效。url

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/

相關文章
相關標籤/搜索