【问题标题】:Docker linked containers, Docker Networks, Compose Networks - how should we now 'link' containersDocker 链接容器、Docker Networks、Compose Networks - 我们现在应该如何“链接”容器
【发布时间】:2016-04-16 02:31:43
【问题描述】:

我有一个现有的应用程序,其中包含在同一主机上运行的 4 个 docker 容器。它们已使用link 命令链接在一起。

然而,在 docker 升级后,link 行为已被弃用,并且似乎有所改变。我们现在遇到了容器失去彼此链接的问题。

所以,docker 说要在 linked 容器上使用新的 Network 功能。但我看不出这是如何工作的。

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

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

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

另外,compose 看起来有一个用于链接容器的简单设置,并且可能会自动执行其中的一些操作 - 组合是定义多容器应用程序的方式吗?还是在生产中运行它还为时过早?

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

在未来的某个时候,我们可能需要将其中一个容器移动到不同的主机......

【问题讨论】:

    标签: docker docker-compose docker-networking


    【解决方案1】:

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

    不,您现在必须使用容器名称作为它们的主机名。新的网络功能不知道将使用哪些端口。将其视为插入同一网络集线器的 2 台计算机。两者都可以通过主机名来寻址另一个。

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

    是的,作为网络一部分的所有容器的 /etc/hosts 文件将由 docker 引擎实时更新。

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

    使用容器名称。请参阅使用网络命令文档的Connect containers 部分: 一旦连接,容器就可以使用另一个容器的 IP 地址或名称进行通信。

    此外,compose 看起来有一个用于链接容器的简单设置,并且可能会自动执行其中的一些操作 - compose 会是定义多容器应用程序的方式吗?还是在生产中运行它为时过早?

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

    此外,当前的实现有点不方便,因为我们必须使用由项目名称 + _ + 容器名称 + @组成的完整容器名称987654327@。 documentation 表示下一个版本(当前版本是 1.5)将对此进行改进,这样我们就不必担心 项目名称 来寻址容器。

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

    是的,与 overlay network documentation 中详述的 Swarm 结合使用

    【讨论】:

    • 太棒了,感谢您的详细回答。当我们希望转向多主机设置时,我会再次回顾 compose,但现在听起来主机文件是前进的方向......
    • 如何发现容器暴露的端口?假设我有 2 个容器,a,映射端口 7474 和 b。 B 可以通过hosts 文件找到A - http://a,但是有没有办法发现映射的端口?使用links,您可以检查环境变量....
    • 网络中没有端口转换。仅当您在 Docker 主机上发布容器端口而不是仅当您公开端口时端口才能不同
    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多