在我的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”检查运行状况检查输出时,我总是得到 - < / p>
{
"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"
}
]
}
然而,我可以从终端运行此脚本并获得“Service started”消息。当我从浏览器请求ping url并且典型响应时间以ms为单位时,我也能看到“200 OK”响应。此外,在服务被宣布为“不健康”之前,我能够在浏览器上看到200响应。
我在我的智慧结束时试图找出我做得不对的任何事情。有人可以帮帮我吗?
答案 0 :(得分:1)
想出这个 - &gt; 在我的设置中,我有4个docker容器在端口8080上运行tomcat服务器并映射到端口(9000,9001,9002和9003)以及在我的ubuntu(v16.04)服务器上的端口443上运行的Apache Webserver。 Apache有一个反向代理,配置为将请求转发到各个docker容器。这部分工作正常。例如。 - 我向apache webserver(https://myHost.com/authz/ping)发出请求,请求转发到单个docker容器(http://myHost.com:9000/authz/ping)。
但是,当我试图提出此请求时,healthcheck apis在docker容器中运行,而且所有这些都是&gt; https://myHost.com/authz/ping但是docker容器无法连接到主机上运行的Apache Web服务器,这就是它失败的原因。
我将健康检查网址更改为http://localhost:9000/authz/ping,它开始正常工作。 所以,这个位现在已经排序了,但是我仍然需要找到一些方法来从docker容器中创建服务,发现在主机上运行的服务。