Docker在v2中创建链接容器

Docker在v2中创建链接容器,docker,docker-compose,Docker,Docker Compose,在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 c381c79fb

在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完成的,因此不再有条目。我可以使用hosts表来引导负载平衡器;与
scale
命令结合使用时非常有用


在创建容器的过程中,有什么方法可以注入这些内容吗?

Nginx博客上有这篇文章

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过期时重新解析域名

建议
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;
    }
}

内置DNS将执行循环负载平衡。这是否足够满足您的需要,或者您是否需要一些不同的东西?我不相信DNS会进行循环。我在这里创建了一个示例:我认为这证明了这一点?我是基于他们的是,我做了更多的阅读,发现您需要在compose文件中创建一个网络别名。如果你想看的话,我已经承诺了。我算出来了。不确定答案是否能解决你的问题,但要朝着正确的方向走。很棒的发现。我将更新这个示例,看看是否也能让它工作。