HAProxy image附带了一个非常紧凑的debian版本,没有ping,wget,curl或其他命令来验证。如何使用docker-compose健康检查,验证HAProxy是否启动并运行?
ssm49v7z1#
类似这样的东西可能会起作用:echo“”> /dev/tcp/${HOSTNAME}/${PORT}|| 1号出口它使用内置的/dev/tcp和bash来测试与HAProxy应该运行的端口的连接,如果无法连接,则会失败。
ghhaqwfi2#
您可以在传递给docker容器的haproxy.cfg中配置健康检查。运行状况检查部分可能如下所示:
frontend frontend_name ... use_backend healthcheck if { path_beg /health } backend healthcheck server disabled-server 127.0.0.1:1 disabled errorfile 503 /path/to/template.html
以及运行状况检查模板文件:
HTTP/1.0 200 OK Cache-Control: no-cache Connection: close Content-Type: text/plain up
这是如何工作的,健康检查后端,你会从前端路由到任何你喜欢的路径/健康,例如。而不是响应一个503,错误文件指令允许您返回一个自定义的错误响应,在本例中为200。
xpcnnkqh3#
扩展@AdrianF上面的答案,我使用了以下内容:在HAProxy的配置中,我添加了:
frontend health mode http bind 127.0.0.1:80 http-request return status 200 if { src 127.0.0.0/8 }
然后,在HAProxy的Compose文件中:
healthcheck: test: | bash -c 'exec 3<>/dev/tcp/127.0.0.1/80; echo -e "GET / HTTP/1.1\nConnection: close\n" >&3; cat <&3 | grep -q "200 OK"'
注意:我不得不在这里使用一个heredoc,因为一个单行变量一直在抱怨一个YAML错误,我追踪到Connection后面的冒号。也许有办法逃脱,但我想不出来。
Connection
3条答案
按热度按时间ssm49v7z1#
类似这样的东西可能会起作用:
echo“”> /dev/tcp/${HOSTNAME}/${PORT}|| 1号出口
它使用内置的/dev/tcp和bash来测试与HAProxy应该运行的端口的连接,如果无法连接,则会失败。
ghhaqwfi2#
您可以在传递给docker容器的haproxy.cfg中配置健康检查。运行状况检查部分可能如下所示:
以及运行状况检查模板文件:
这是如何工作的,健康检查后端,你会从前端路由到任何你喜欢的路径/健康,例如。而不是响应一个503,错误文件指令允许您返回一个自定义的错误响应,在本例中为200。
xpcnnkqh3#
扩展@AdrianF上面的答案,我使用了以下内容:
在HAProxy的配置中,我添加了:
然后,在HAProxy的Compose文件中:
注意:我不得不在这里使用一个heredoc,因为一个单行变量一直在抱怨一个YAML错误,我追踪到
Connection
后面的冒号。也许有办法逃脱,但我想不出来。