Docker?容器健康檢查的指令方式詳解
正文
Docker 容器健康檢查指的是在 Dockerfile 中使用 HEALTHCHECK
指令對(duì)容器的運(yùn)行狀態(tài)進(jìn)行檢查,
并在 docker ps
的 STATUS 欄顯示 healthy/unhealthy。
HEALTHCHECK 指令有兩種格式
HEALTHCHECK [OPTIONS] CMD command
(通過(guò)在容器內(nèi)運(yùn)行命令檢查容器的健康狀態(tài))HEALTHCHECK NONE
(禁用從基礎(chǔ)鏡像中繼承任何健康檢查)
HEALTHCHECK
指令告訴 Docker 如何測(cè)試一個(gè)容器,以檢查它是否仍在工作。
這可以檢測(cè)到一些情況,例如 web 服務(wù)器陷入無(wú)限循環(huán),無(wú)法處理新的連接,即使服務(wù)器進(jìn)程仍在運(yùn)行。
當(dāng)容器指定了健康檢查時(shí),除了正常狀態(tài)外,它還具有健康狀態(tài)。此狀態(tài)初始為 starting
。
只要健康檢查通過(guò),它就會(huì)恢復(fù)到 healthy
(無(wú)論它以前處于什么狀態(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í)間超過(guò) 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)參見(jiàn) 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
寫(xiě)在 stdout 或 stderr 上的任何輸出文本(UTF-8編碼)都將存儲(chǔ)在健康狀態(tài)中,并且可以通過(guò) docker inspect
進(jìn)行查詢(xún)。
這樣的輸出應(yīng)該保持簡(jiǎn)短(目前只存儲(chǔ)前4096個(gè)字節(jié))。
當(dāng)容器的健康狀態(tài)發(fā)生變化時(shí),將生成一個(gè)具有新?tīng)顟B(tài)的 health_status
事件。
以上就是Docker 容器健康檢查的指令方式詳解的詳細(xì)內(nèi)容,更多關(guān)于Docker 容器健康檢查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker搭建Minio容器的流程步驟(完整詳細(xì)版)
Minio 是一個(gè)基于A(yíng)pache License v2.0開(kāi)源協(xié)議的對(duì)象存儲(chǔ)服務(wù),雖然輕量,卻擁有著不錯(cuò)的性能,它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),本文將給大家介紹Docker搭建Minio容器的流程步驟,需要的朋友可以參考下2024-08-08Docker構(gòu)建Maven+Tomcat基礎(chǔ)鏡像的實(shí)現(xiàn)
這篇文章主要介紹了Docker構(gòu)建Maven+Tomcat基礎(chǔ)鏡像的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09docker根據(jù)已生成的容器生成docker-compose.yml文件的實(shí)現(xiàn)步驟
這篇文章主要給大家介紹了docker 如何根據(jù)已生成的容器生成docker-compose.yml 文件,文中有詳細(xì)的代碼示例和實(shí)現(xiàn)步驟,對(duì)大家的學(xué)習(xí)有一定的幫助,需要的朋友可以參考下2023-10-10docker?pull報(bào)錯(cuò)unexpected?EOF問(wèn)題的解決方案
在清理Docker私有倉(cāng)庫(kù)的垃圾鏡像和緩存后,新推送到倉(cāng)庫(kù)的鏡像會(huì)出現(xiàn)unexpectedEOF錯(cuò)誤,這篇文章主要介紹了docker?pull報(bào)錯(cuò)unexpected?EOF問(wèn)題的解決方案,需要的朋友可以參考下2025-04-04基于Docker部署Tomcat集群、 Nginx負(fù)載均衡的問(wèn)題小結(jié)
這篇文章主要介紹了基于Docker部署 Tomcat集群、 Nginx負(fù)載均衡,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Docker中安裝ElasticSearch+Kibana+Logstash(ELK)實(shí)踐記錄
文章介紹了如何使用Docker在本地安裝和配置Elasticsearch、Kibana和Logstash(ELK堆棧),本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-03-03