我有 2 个 docker 容器同一网络-web
并与后端一起proxy
运行haproxy
backend web
server web web:80 check
也init-addr
设置为,因此如果在启动时last,libc,none
无法解析它也不会失败。web
如果我proxy
先开始,haproxy
报告could not resolve address 'web', disabling server
。
然后我启动web
。它可以通过名称从访问proxy
,并响应 ping 和 telnet。但后端haproxy
仍然处于web
宕机状态。
我希望按照默认间隔(根据文档每 2 秒一次)haproxy
重试检查后端,并且作为弹性 - 每次检查时都尝试再次解析 dns。web
我该如何配置haproxy
以等待 DNS 解析后端服务器名称然后自动启动该后端?
答案1
如上所述,您当前的配置使 HAProxy 只能在启动时解析主机名这里。由于无法web
在启动时解析,因此相关服务器将被禁用。
为了使 HAProxy 在启动后进行 DNS 解析,您需要添加解析器部分。
例子:
resolvers mydns
nameserver dns1 10.0.0.1:53
nameserver dns2 10.0.0.2:53
backend web
server web web:80 check init-addr last,libc,none resolvers mydns
然后,每当web
变得可解析时,您都会在日志中看到类似这样的内容:
Server web/web ('web') is UP/READY (resolves again).