2016-01-11 122 views
6

我有一个现有的应用程序,包含在同一主机上运行的4个Docker容器。他们已经使用link命令链接在一起。Docker链接容器,Docker Networks,Compose网络 - 我们应该如何“链接”容器

但是,在docker升级之后,link的行为已被弃用,并且似乎已经改变。我们现在遇到问题,容器正在失去彼此的链接。

因此,码头说,使用新的Network功能超过link ed容器。但我看不到这是如何工作的。

如果2个容器在同一个网络中,是否相同ENV变量会自动暴露在容器上,就好像它们已链接?

或者是用正确的容器名称/ IP地址更新主机文件?即使在docker restart之后?

我无法在文档中看到容器如何在其网络中找到另一个容器的位置?

此外,compose看起来有一个简单的链接容器的设置,并可能自动化一些 - 将构成定义多容器应用程序的方式?或者在生产中运行它还为时过早?

compose是否也支持多主机配置?

在未来我们可能会需要移动容器到不同的主机之一的某一点....

回答

3

如果2个容器是在同一网络中,都是一样的ENV乏自动曝光在容器上,就好像它们被链接在一起?

不,您现在必须使用容器名称作为它们的主机名。新的网络功能不知道将使用哪个端口。把它想象成插在同一个网络集线器上的两台电脑。两者都可以通过其主机名来解决另一个问题。

是更新了正确的容器名称/ IP地址的主机文件?即使在码头重启之后?

yes,/etc/hosts作为网络一部分的所有容器的文件将由码头引擎进行实时更新。

我在文档中看不到一个容器如何在网络中找到另一个容器的位置?

使用容器名称。请参阅Connect containers部分使用网络命令 doc: 连接后,容器可以使用其他容器的IP地址或名称进行通信。

此外,撰写看上去有一个简单的设置用于连接容器,并可以自动完成一些这一点 - 将组成是去定义多容器的应用程序的方式吗?或者在生产中运行它还为时过早?

Compose通过提供--x-networking选项来支持新的网络功能。您不应该在生产中使用(目前的Compose版本是1.5)。

此外,目前的实现是一个有点不方便,因为我们必须使用的是由项目名称 + _ + 容器名称 + _1的全部容器的名称。 documentation表示下一个版本(当前版本为1.5)将改善这一点,以便我们不必担心项目名称来解决容器问题。

组成支持多主机配置吗?

是的,在与群conjonction详见在overlay network documentation

+0

真棒,谢谢你的详细解答。当我们转移到多主机设置时,我会再次审查撰写,但现在听起来好像主机文件是前进的方向...... –

+0

您将如何发现容器暴露的端口?假设我有2个容器,a,它映射端口7474和b。 B可以通过'hosts'文件找到A - http:// a,但是有没有办法找到映射的端口?使用'link's你可以检查一个env var .... –

+0

网络中没有端口转换。只有当您在Docker主机上_publish_容器端口时,端口才可以不同,而不仅仅是_expose_端口 – Thomasleveil

相关问题