我有一台服务器在端口9083上运行apache配置单元服务。问题是它不支持http
协议(但使用thrift
协议)。所以我不能简单地添加
HEALTHCHECK CMD http://127.0.0.1:9083 || exit 1 # this check fails
我想要的只是检查该端口是否已打开。我在服务器上有netstat
和curl
,但没有nc
。
到目前为止,我尝试了以下选项,但它们都不适合作为健康检查。
netstat -an | grep 9083 | grep LISTEN | echo $? # This works
netstat -an | grep 9084 | grep LISTEN | echo $? # but so does this
我从上面解释的问题是它只是告诉我我的语法是正确的,但没有真正测试该端口是否真的在听
因为当我netstat -an
时,我得到以下输出,这清楚地显示只有9083
正在收听,而不是9084
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0
0.0.0.0:9083 0.0.0.0:* LISTEN tcp 0 0
答案 0 :(得分:4)
虽然回答了一个老问题,但对于未来的googlers,以下内容对我有用:
HEALTHCHECK CMD netstat -an | grep 9083 > /dev/null; if [ 0 != $? ]; then exit 1; fi;
答案 1 :(得分:2)
您可以使用/dev/tcp
像这样:
printf "GET / HTTP/1.1\n\n" > /dev/tcp/127.0.0.1/9083
有关详情,请查看:http://www.tldp.org/LDP/abs/html/devref1.html#DEVTCP
答案 2 :(得分:0)