簡體   English   中英

碼頭工人撰寫健康檢查問題

[英]docker compose healthcheck issue

在我的docker-compose.yml(版本-2.3)中,我為幾個服務設置了運行狀況檢查。 這是相關的yml代碼段-

      healthcheck:
        test: ["CMD-SHELL", "/secrets/authz_Startup.sh"]
        interval: 30s
        timeout: 30s
        retries: 3
        start_period: 300s 

這是我的authz_Startup.sh內容-

#!/bin/bash
HTTP_STATUS="$(curl -IL --silent https://myHost.com/authz/ping 2>/dev/null | head -n 1 | cut -d ' ' -f 2)";
if [ "$HTTP_STATUS" = "200" ]; then
    echo "Service started";
    exit 0;
else
    echo "***Service NOT started*** --> $HTTP_STATUS";  
    exit 1;
fi
exit;

但是,當我運行“ docker-compose up”,然后使用“ docker inspect --format ='{{json .State.Health}}'CONTAINER_ID | jq”檢查運行狀況檢查輸出時,總是得到-

{
  "Status": "unhealthy",
  "FailingStreak": 16,
  "Log": [
    {
      "Start": "2018-03-10T16:05:18.361126144+05:30",
      "End": "2018-03-10T16:05:18.668852098+05:30",
      "ExitCode": 1,
      "Output": "***Service NOT started*** --> \n"
    },
    {
      "Start": "2018-03-10T16:05:48.676933885+05:30",
      "End": "2018-03-10T16:05:48.973643139+05:30",
      "ExitCode": 1,
      "Output": "***Service NOT started*** --> \n"
    }
  ]
}

但是,我可以從終端運行此腳本並獲得“服務已啟動”消息。 當我從瀏覽器請求ping URL時,我還能夠看到“ 200 OK”響應,並且典型的響應時間以毫秒為單位。 另外,在該服務被宣布為“不健康”之前,我能夠在瀏覽器上看到200響應。

我竭盡全力試圖弄清楚我做錯了什么。 有人可以幫我嗎?

弄清楚了->在我的設置中,我有4個docker容器在端口8080上運行tomcat服務器並映射到端口(9000、9001、9002和9003),以及一個Apache Web服務器在ubuntu上的443端口上運行(v16.04)服務器。 Apache具有配置為將請求轉發到各個Docker容器的反向代理。 這部分工作正常。 例如-我向Apache服務器發出請求( https://myHost.com/authz/ping ),該請求轉發到單個Docker容器( http://myHost.com:9000/authz/ping )。

但是,運行狀況檢查api從docker容器中運行,而當我嘗試發出此請求時,所有這些都-> https://myHost.com/authz/ping但docker容器無法連接到主機上運行的Apache Web服務器機器,這就是為什么它失敗了。

我將運行狀況檢查URL更改為http:// localhost:9000 / authz / ping ,它開始正常工作。 因此,現在對這部分進行了排序,但是我仍然需要找出某種方法來從docker容器中制作服務,發現在主機上運行的服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM