【问题标题】:Docker-compose network linkdocker-compose 网络链接
【发布时间】:2017-02-23 08:30:33
【问题描述】:

Docker 的“链接”功能将被弃用,因为新功能“网络”已发布 (link)。我正在使用一些容器制作 docker-compose,并且可以使用“链接”相互连接(无需任何其他命令)。

由于我需要将链接配置更改为网络,因此我必须在“docker-compose up”之前创建 docker 网络。是否有任何 docker-compose 功能可以自动制作 docker 网络?或者任何其他方式将每个容器与一些配置连接起来?

【问题讨论】:

    标签: docker


    【解决方案1】:

    默认情况下,带有 v2 yml 的 docker-compose 将为您的项目启动一个网络。除非您另有明确说明,否则您定义的任何网络也将被创建。这是一个 docker-compose.yml 示例:

    version: '2'
    
    networks:
      dbnet:
      appnet:
    
    services:
      db:
        image: busybox
        command: tail -f /dev/null
        networks:
        - dbnet
    
      app:
        image: busybox
        command: tail -f /dev/null
        networks:
        - dbnet
        - appnet
    
      proxy:
        image: busybox
        command: tail -f /dev/null
        ports:
        - 80
        networks:
        - appnet
    

    然后当你启动它时,你会看到它创建了定义的网络:

    $ docker-compose up -d
    Creating network "test_dbnet" with the default driver
    Creating network "test_appnet" with the default driver
    Creating test_app_1
    Creating test_db_1
    Creating test_proxy_1
    

    请注意,链接容器也会创建隐式依赖项,因此您可能希望在 yml 中使用 depends_on 在删除链接后在任何依赖项中显式。

    【讨论】:

    • 这实际上是我想要的。谢谢:)
    【解决方案2】:

    docker-compose 为你的 compose 项目创建一个默认网络。您只需将您的 compose 项目迁移到 compose yaml 格式的version: '2'version: '3'。请阅读how to upgrade了解更多信息。

    使用版本 2 和 3,您无需再指定链接,因为如果您未明确指定其他网络,所有服务都将位于默认网络中。

    更新:要让 2 个容器相互通信,您可以简单地使用将解析为容器 IP 的服务名称。现在仅当出于某种原因容器需要特定名称时才需要链接,例如因为它是硬编码的。

    【讨论】:

    • 那么如何将容器连接到容器?我需要将 db 容器连接到 tomcat 容器。如果不弃用,我将在 docker-compose 中使用“链接”。
    • 我更新了答案,也回答了您评论中的问题。在这种情况下,tomcat可以简单地使用“db”(假设服务名为db)
    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多