我在三个docker-compose文件中定义了服务。一个带有服务,另外两个是我的应用程序的蓝色和绿色实例。
所有人共享相同的外部网络,并且使用external_links
偶尔在蓝色和绿色之间切换时,我需要重新启动服务以更新服务容器上的IP的IP更改。
无论如何,是否有动态更新docker链接的信息,所以我不必重新启动nginx容器,从而造成一段时间的不可用?
答案 0 :(得分:0)
链接是执行此操作的错误方法。链接通过修改容器的主机文件来工作,但是该修改不会随着目标容器的替换而更新。由于诸如此类的各种问题,它们在很大程度上已被弃用。
从撰写文件中删除链接,然后将容器放置在用户创建的常见网络上(即不是docker提供的多个默认网络之一)。开箱即用,compose将为您提供服务的用户创建的网络(可以用${project}_default
查看的名为docker network ls
的默认网络),也可以在从以下位置连接容器时指定外部网络多个项目。
对于共享网络,docker将根据容器名称和任何网络别名为您提供DNS解析。使用docker-compose
,您将可以在网络外为服务名称配置别名。因此,如果您有一个名为“ web”的服务,则可以运行curl http://web:8080
以在“ web”服务的任何副本上命中端口8080。如果您转换为群模式,则这种用户体验是相同的,尽管它是通过VIP而不是DNS-RR来实现的,DNS-RR可以解决滚动更新期间缓存的DNS条目之类的问题。