docker HealthCheck健康檢查


需求

最近遇到的問題:線上跑的一個 Node 鏡像是在運行的,狀態為 up ,但是訪問報 502 ,重啟鏡像無效,重新拉了個鏡像運行才恢復正常。於是想研究下如何從應用層面去檢查容器的狀態

為什么

docker ps STATUS 列顯示容器的狀態

[root@ansible ~]# docker ps -a
CONTAINER ID        IMAGE                                               COMMAND                  CREATED             STATUS                     PORTS                       NAMES 
1cfb357dd83f        9962e62376bc                                        "/bin/sh -c 'apk upg…"   3 months ago        Exited (0) 3 months ago                                goofy_engelbart
91697fe789ee        3b6417bca798                                        "/bin/sh -c 'apk upg…"   3 months ago        Exited (99) 3 months ago                               lucid_swirles
2004c9aa5efc        172.18.11.161/lzwd/jdk1.8:v1                        "tini -- /bin/sh"        3 months ago        Up 3 months                                            elastic_proskuriakova

命令顯示:

  1. 在運行的,狀態為 up
  2. 正常停止的,狀態為 Exited (0)
  3. 因發生故障停止了,退出代碼為非0,例如 Exited (99) Exited (1)

即使是狀態為 up 的狀態,也不代表業務就是正常的。如我們遇到的就是,狀態為 up ,訪問卻提示 502。所以如何從應用層面去檢查容器的狀態呢?引出healcheck

怎么做

對於 HTTP 服務接口的容器,使用 curl 檢查 HTTP 狀態碼

例如每10分鍾檢測一次,超時5秒就報超時:

HEALTHCHECK --interval=10m --timeout=5s \
  CMD curl --fail http://localhost:8080/ || exit 1

當指定了 healthcheck 指令啟動容器后,初始狀態會為 starting ,在 healtheck 指令檢查成功后,狀態會變為 healthy,檢查成功,狀態會變成 unhealthy


免責聲明!

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



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