Docker原生健康檢查使用


Dockerfile中使用HEALTHCHECK的形式有兩種:
1、HEALTHCHECK [options] CMD command(本次詳細解釋)
2、HEALTHCHECK NODE 意思是禁止從父鏡像繼承的HEALTHCHECK生效
下面我們主要介紹第一種形式的應用:
options有三個參數可設定:

    interval:間隔(s秒、m分鍾、h小時),從容器運行起來開始計時interval秒(或者分鍾小時)進行第一次健康檢查,隨后每間隔interval秒進行一次健康檢查;還有一種特例請看timeout解析。
    timeout:執行command需要時間,比如curl 一個地址,如果超過timeout秒則認為超時是錯誤的狀態,此時每次健康檢查的時間是timeout+interval秒。
    retries:連續檢查retries次,如果結果都是失敗狀態,則認為這個容器是unhealth的

CMD關鍵字后面可以跟執行shell腳本的命令或者exec數組。CMD后面的命令執行完的返回值代表容器的運行狀況,可能的值:0 health狀態,1 unhealth狀態,2 reserved狀態,這個沒細研究,用的也很少。
注意:在Dockerfile中只能有一個HEALTHCHECK指令。如果您列出多個,則只有最后一個HEALTHCHECK將生效。

下面我們進行幾個測試:
我手里有一個nginx的鏡像,我們以它為base鏡像進行一些簡單的測試,以下是我的Dockerfile和測試腳本。

這里寫圖片描述
通過Dockerfile可以預計,容器啟動10s內HEALTCHECK的狀態為starting,10s后為healthy狀態。腳本是監聽容器的80端口,存在返回0,不存在返回1。
————————————————
版權聲明:本文為CSDN博主「Tech_Salon」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/tech_salon/article/details/77255915

 

Docker 原生健康檢查能力
而自 1.12 版本之后,Docker 引入了原生的健康檢查實現,可以在Dockerfile中聲明應用自身的健康檢測配置。HEALTHCHECK 指令聲明了健康檢測命令,用這個命令來判斷容器主進程的服務狀態是否正常,從而比較真實的反應容器實際狀態。
HEALTHCHECK 指令格式:
HEALTHCHECK [選項] CMD <命令>:設置檢查容器健康狀況的命令
HEALTHCHECK NONE:如果基礎鏡像有健康檢查指令,使用這行可以屏蔽掉
注:在Dockerfile中 HEALTHCHECK 只可以出現一次,如果寫了多個,只有最后一個生效。
使用包含 HEALTHCHECK 指令的dockerfile構建出來的鏡像,在實例化Docker容器的時候,就具備了健康狀態檢查的功能。啟動容器后會自動進行健康檢查。
HEALTHCHECK 支持下列選項:
--interval=<間隔>:兩次健康檢查的間隔,默認為 30 秒;
--timeout=<間隔>:健康檢查命令運行超時時間,如果超過這個時間,本次健康檢查就被視為失敗,默認 30 秒;
--retries=<次數>:當連續失敗指定次數后,則將容器狀態視為 unhealthy,默認 3 次。
--start-period=<間隔>: 應用的啟動的初始化時間,在啟動過程中的健康檢查失效不會計入,默認 0 秒; (從17.05)引入
在 HEALTHCHECK [選項] CMD 后面的命令,格式和 ENTRYPOINT 一樣,分為 shell 格式,和 exec 格式。命令的返回值決定了該次健康檢查的成功與否:
0:成功;
1:失敗;
2:保留值,不要使用
容器啟動之后,初始狀態會為 starting (啟動中)。Docker Engine會等待 interval 時間,開始執行健康檢查命令,並周期性執行。如果單次檢查返回值非0或者運行需要比指定 timeout 時間還長,則本次檢查被認為失敗。如果健康檢查連續失敗超過了 retries 重試次數,狀態就會變為 unhealthy (不健康)。

 


免責聲明!

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



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