我有一个现有的应用程序,包含4个在同一主机上运行的docker容器。它们已使用link
命令链接在一起。
但是,在对docker进行一些升级后,link
行为已被弃用,并且似乎已更改。我们现在遇到容器正在失去彼此链接的问题。
因此,docker说要在Network
个容器上使用新的link
功能。但是我看不出它是如何工作的。
如果2个容器在同一个网络中,那么容器上自动公开的ENV
vars是否相同?
或是使用正确的容器名称/ IP地址更新主机文件?即使在docker restart
之后?
我在文档中看不到容器如何在其网络中找到另一个容器的位置?
此外,compose
看起来有一个简单的设置来链接容器,并且可能会自动化其中的一部分 - 这将构成定义多容器应用程序的方式吗?或者在生产中运行它还为时尚早?
compose
是否也支持多个主机配置?
在未来的某个时候,我们可能需要将其中一个容器移到另一个主机....
答案 0 :(得分:3)
如果两个容器在同一个网络中,那么容器上自动暴露的ENV变量是否相同,就像链接一样?
不,您现在必须使用容器名称作为其主机名。新的网络功能不知道将使用哪些端口。可以想象这是两台计算机插在同一个网络集线器上。两者都可以通过其主机名来解决另一个问题。
是使用正确的容器名称/ IP地址更新的hosts文件?甚至在码头重启后?
是的,作为网络一部分的所有容器的/etc/hosts
文件将由docker引擎实时更新。
我无法在文档中看到容器如何在其网络中找到另一个容器的位置?
使用容器名称。请参阅使用网络命令文档的Connect containers部分: 连接后,容器可以使用其他容器的IP地址或名称进行通信。
另外,compose看起来有一个简单的设置来链接容器,并且可能会自动化其中的一部分 - 这将构成定义多容器应用程序的方法吗?或者在生产中运行它还为时过早?
Compose通过提供--x-networking
选项支持新网络功能作为测试版。你不应该在生产中使用(当前的Compose版本是1.5)。
此外,当前的实现有点不方便,因为我们必须使用由项目名称 + _
+ 容器名称组成的完整容器名称+ _1
。 documentation表示下一个版本(当前版本为1.5)将改进这一点,这样我们就不必担心项目名称来处理容器。
中详述的Swarm相结合组合是否也支持多个主机配置?