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
秒內運行,而後在前一次檢查完成後的 interval
秒內再次運行。curl
若是一次狀態檢查花費的時間超過 timeout
秒,則認爲此次檢查失敗。post
容器的運行狀態檢查連續失敗 retries
次纔會被視爲不健康。測試
start period
爲須要時間啓動的容器提供初始化時間。在此期間的探測失敗將不計入最大重試次數。
可是,若是在啓動期間健康檢查成功,則認爲容器已啓動,全部連續失敗的狀況都將計算到最大重試次數。編碼
Dockerfile 中只能有一個 HEALTHCHECK
指令。若是列出多個,則只有最後一個 HEALTHCHECK
纔會生效。url
CMD
關鍵字後面的命令能夠是 shell 命令(例如 HEALTHCHECK CMD /bin/check-running
)或 exec 數組(與其餘 Dockerfile 命令同樣,有關詳細信息,請參見 ENTRYPOINT
)。
command
的退出狀態表示容器的健康狀態。可能的值是:
例如,每五分鐘左右檢查一次 web 服務器是否能在三秒內爲站點的主頁提供服務:
HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/ || exit 1
爲了幫助調試失敗的探測,command
寫在 stdout 或 stderr 上的任何輸出文本(UTF-8編碼)都將存儲在健康狀態中,而且能夠經過 docker inspect
進行查詢。
這樣的輸出應該保持簡短(目前只存儲前4096個字節)。
當容器的健康狀態發生變化時,將生成一個具備新狀態的 health_status
事件。