【问题标题】:docker-compose: difference between networks and linksdocker-compose:网络和链接之间的区别
【发布时间】:2017-05-08 17:42:43
【问题描述】:

我正在学习 docker。我看到这两个术语让我感到困惑。例如,这里是一个 docker-compose,它定义了两个服务 redisweb-app

services:
  redis:
    container_name: redis
    image: redis:latest
    ports:
      - "6379:6379"
    networks:
      - lognet

  app:
    container_name: web-app
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    volumes:
      - ".:/webapp"
    links:
      - redis
    networks:
      - lognet

networks:
  lognet:
    driver: bridge

docker-compose 文件定义了一个名为 lognet 的桥接网络,所有服务都将连接到该网络。据我了解,此操作使这些服务可以看到其他服务。那么为什么在上述情况下应用服务仍然需要链接到redis服务。

谢谢

【问题讨论】:

    标签: docker docker-compose docker-networking


    【解决方案1】:

    链接已被网络取代。 Docker 将它们描述为 legacy feature that you should avoid using. 您可以安全地删除链接,两个容器将能够通过它们的服务名称(或容器名称)相互引用。

    使用 compose,链接确实具有创建隐含依赖项的副作用。您应该将其替换为更明确的 depends_on 部分,以便应用不会尝试在没有或在 redis 启动之前运行。

    顺便说一句,我不喜欢硬编码 container_name,除非您确定这是主机上唯一以该名称存在的容器,并且您需要从 docker cli 按名称引用它。如果没有容器名称,docker-compose 会给它一个不太直观的名称,但它也会在网络上给它一个 redis 的别名,这正是容器到容器网络所需要的。所以这些建议的最终结果是:

    version: '2'
    # do not forget the version line, this file syntax is invalid without it
    
    services:
      redis:
        image: redis:latest
        ports:
          - "6379:6379"
        networks:
          - lognet
    
      app:
        container_name: web-app
        build:
          context: .
          dockerfile: Dockerfile
        ports:
          - "3000:3000"
        volumes:
          - ".:/webapp"
        depends_on:
          - redis
        networks:
          - lognet
    
    networks:
      lognet:
        driver: bridge
    

    【讨论】:

    • 我认为 @Trân 是在询问 docker-compose 中的 links 并没有被弃用。仅在 docker run 命令中。 forums.docker.com/t/are-links-deprecated-in-docker-compose/…
    • 它们已被弃用,我之前已经直接从 docker compose 开发人员那里验证了这一点。文档显示,swarm 模式根本不支持它们,要使它们与 docker compose 一起使用,您需要一个通用网络,无论如何都可以提供 DNS 支持。 docs.docker.com/compose/compose-file/#links
    • 那么这里depends_on只指优先级?
    • @chenghuayang 是的,我已经更新了文档链接。
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 2016-07-03
    • 2019-02-01
    • 2012-10-31
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多