健康检查HAProxy docker容器出现问题

6rvt4ljy  于 2023-06-21  发布在  Docker
关注(0)|答案(3)|浏览(134)

HAProxy image附带了一个非常紧凑的debian版本,没有ping,wget,curl或其他命令来验证。如何使用docker-compose健康检查,验证HAProxy是否启动并运行?

ssm49v7z

ssm49v7z1#

类似这样的东西可能会起作用:
echo“”> /dev/tcp/${HOSTNAME}/${PORT}|| 1号出口
它使用内置的/dev/tcp和bash来测试与HAProxy应该运行的端口的连接,如果无法连接,则会失败。

ghhaqwfi

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。

xpcnnkqh

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后面的冒号。也许有办法逃脱,但我想不出来。

相关问题