Docker?容器健康檢查的指令方式詳解
正文

Docker 容器健康檢查指的是在 Dockerfile 中使用 HEALTHCHECK 指令對(duì)容器的運(yùn)行狀態(tài)進(jìn)行檢查,
并在 docker ps 的 STATUS 欄顯示 healthy/unhealthy。
HEALTHCHECK 指令有兩種格式
HEALTHCHECK [OPTIONS] CMD command(通過在容器內(nèi)運(yùn)行命令檢查容器的健康狀態(tài))HEALTHCHECK NONE(禁用從基礎(chǔ)鏡像中繼承任何健康檢查)
HEALTHCHECK 指令告訴 Docker 如何測(cè)試一個(gè)容器,以檢查它是否仍在工作。
這可以檢測(cè)到一些情況,例如 web 服務(wù)器陷入無限循環(huán),無法處理新的連接,即使服務(wù)器進(jìn)程仍在運(yùn)行。
當(dāng)容器指定了健康檢查時(shí),除了正常狀態(tài)外,它還具有健康狀態(tài)。此狀態(tài)初始為 starting。
只要健康檢查通過,它就會(huì)恢復(fù)到 healthy(無論它以前處于什么狀態(tài))。在連續(xù)失敗一定次數(shù)后,它就會(huì)變得 unhealthy。
CMD 之前可以出現(xiàn)的選項(xiàng)有
- --interval=DURATION(默認(rèn):30s)
- --timeout=DURATION(默認(rèn):30s)
- --start-period=DURATION(默認(rèn):0s)
- --retries=N(默認(rèn):3)
運(yùn)行狀態(tài)檢查
首先會(huì)在容器啟動(dòng)后的 interval 秒內(nèi)運(yùn)行,然后在前一次檢查完成后的 interval 秒內(nèi)再次運(yùn)行。
如果一次狀態(tài)檢查花費(fèi)的時(shí)間超過 timeout 秒,則認(rèn)為這次檢查失敗。
容器的運(yùn)行狀態(tài)檢查連續(xù)失敗 retries 次才會(huì)被視為不健康。
start period 為需要時(shí)間啟動(dòng)的容器提供初始化時(shí)間。在此期間的探測(cè)失敗將不計(jì)入最大重試次數(shù)。
但是,如果在啟動(dòng)期間健康檢查成功,則認(rèn)為容器已啟動(dòng),所有連續(xù)失敗的情況都將計(jì)算到最大重試次數(shù)。
Dockerfile 中只能有一個(gè) HEALTHCHECK 指令。如果列出多個(gè),則只有最后一個(gè) HEALTHCHECK 才會(huì)生效。
CMD 關(guān)鍵字后面的命令可以是 shell 命令(例如 HEALTHCHECK CMD /bin/check-running)或 exec 數(shù)組(與其他 Dockerfile 命令一樣,有關(guān)詳細(xì)信息,請(qǐng)參見 ENTRYPOINT)。
command 的退出狀態(tài)表示容器的健康狀態(tài)。可能的值是:
- 0:成功--容器運(yùn)行良好,可以使用
- 1:不健康—-容器不能正常工作
- 2:保留--不使用此退出碼
例如,每五分鐘左右檢查一次 web 服務(wù)器是否能在三秒內(nèi)為站點(diǎn)的主頁(yè)提供服務(wù):
HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/ || exit 1
為了幫助調(diào)試失敗的探測(cè),command 寫在 stdout 或 stderr 上的任何輸出文本(UTF-8編碼)都將存儲(chǔ)在健康狀態(tài)中,并且可以通過 docker inspect 進(jìn)行查詢。
這樣的輸出應(yīng)該保持簡(jiǎn)短(目前只存儲(chǔ)前4096個(gè)字節(jié))。
當(dāng)容器的健康狀態(tài)發(fā)生變化時(shí),將生成一個(gè)具有新狀態(tài)的 health_status 事件。
以上就是Docker 容器健康檢查的指令方式詳解的詳細(xì)內(nèi)容,更多關(guān)于Docker 容器健康檢查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Docker鏡像提交命令commit的工作原理和使用方法
這篇文章主要介紹了詳解Docker鏡像提交命令commit的工作原理和使用方法,可以依據(jù)這個(gè)容器創(chuàng)建本地鏡像,并可把這個(gè)鏡像推送到Docker hub中,以便在網(wǎng)絡(luò)上下載使用,感興趣的可以了解一下2018-11-11
docker部署rabbitmq消息隊(duì)列實(shí)踐
文章主要介紹了使用Docker部署RabbitMQ的過程,包括在DockerHub上查找和下載RabbitMQ鏡像、通過Docker啟動(dòng)鏡像、映射端口、指定主機(jī)名和容器名等步驟,并詳細(xì)解釋了如何解決啟動(dòng)失敗的問題及如何通過Web端訪問部署好的RabbitMQ2026-04-04
Docker安裝Milvus的實(shí)現(xiàn)步驟
本文主要介紹了Docker安裝Milvus的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-03-03
Docker 部署 PostgreSQL數(shù)據(jù)庫(kù)的兩種方式
本文介紹了使用Docker部署PostgreSQL數(shù)據(jù)庫(kù)的兩種方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-07-07
關(guān)于Docker 刪除dead狀態(tài)的容器問題及解決方案
這篇文章主要介紹了Docker 刪除dead狀態(tài)的容器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
docker中修改mysql最大連接數(shù)及配置文件的實(shí)現(xiàn)
這篇文章主要介紹了docker中修改mysql最大連接數(shù)及配置文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

