在 Docker Compose v1 中,/etc/hosts
文件已使用链接的容器进行更新。例如。
$ cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 redis redis_1 c381c79fb9c2 romantic_yonath
172.17.0.3 48d2ed7033a1
然而,在 v2 中,这是通过 DNS 完成的,因此不再有条目。我可以使用主机表来引导负载均衡器;与 一起使用时非常有用scale
命令。
有没有什么方法可以在容器创建过程中注入这些?
Nginx 博客上有这篇文章使用 DNS 与 NGINX 和 NGINX Plus 进行服务发现 https://www.nginx.com/blog/dns-service-discovery-nginx-plus/.
NGINX 会缓存 DNS 记录,直到下次重新启动或配置重新加载为止,忽略记录的 TTL 值。
解释您所看到的情况,即重新启动容器后,您可以路由到新节点。
这部分在变量中设置域名有一个启动时缓存的解决方法的示例。
resolver 10.0.0.2 valid=10s;
server {
location / {
set $backend_servers backends.example.com;
proxy_pass http://$backend_servers:8080;
}
}
当您在 proxy_pass 指令中使用变量指定域名时,NGINX 将在域名的 TTL 过期时重新解析该域名。
这次讨论 https://github.com/docker/docker/issues/22652建议127.0.0.11
将是容器内解析器的 IP。
我在本地使用此配置来确认缩放后反映了 DNS 更改,并且它似乎有效
resolver 127.0.0.11 valid=5s;
server {
listen 80;
location / {
set $application_servers application;
proxy_pass http://$application_servers:8080;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)