【问题标题】:Docker DNS with Multiple Projects Using the Same Network使用同一网络的多个项目的 Docker DNS
【发布时间】:2019-02-04 15:08:21
【问题描述】:

我有以下docker-compose.yml 文件:

version: '3'
services:
    frontend:
        image: alpine
        command: tail -f /dev/null
        networks:
            - shared
            - default
    backend:
        image: alpine
        command: tail -f /dev/null
        networks:
            - shared
            - default
networks:
    shared:
        external: true

根据上面的文件,我创建了两个项目,它们使用相同的网络 (shared) 和相同的服务名称 (frontendbackend):

docker-compose -p foo up -d
docker-compose -p bar up -d

docker 的 DNS 是否确保 docker-compose -p foo exec frontend ping backend 仅解析到项目 foo 中的后端容器,反之亦然项目 bar

【问题讨论】:

  • 哪个 Docker Compose 版本?
  • 相关question.

标签: docker dns docker-compose


【解决方案1】:

根据https://github.com/docker/compose/issues/4645,这种情况下的解析顺序是不确定的。由于网络正在被转换为 golang 中的无序 dict,因此不会保留顺序。这意味着https://github.com/docker/libnetwork/blob/master/sandbox.go#L593 被查询的端点的顺序与网络的顺序不匹配。

如果使用 docker-compose 版本 2,解决方案是定义 https://docs.docker.com/compose/compose-file/compose-file-v2/#priority。或者完全限定的 dns 名称为 service.network,例如 backend.foo_defaultbackend.shared

【讨论】:

    【解决方案2】:

    根据您的设置,我使用nslookup 来确定 DNS 解析是否被隔离。

    $ docker-compose -p foo exec frontend nslookup backend
    
    Name:      backend
    Address 1: 172.19.0.2 foo_backend_1.shared
    Address 2: 172.19.0.4 bar_backend_1.shared
    

    从上面的输出可以看出,backend 解析到两个容器

    【讨论】:

    • 如果为这两个服务分配一个本地网络。它似乎只解析到本地网络服务。我不确定网络的顺序是否重要。
    • @prd 当您写答案时,描述(即docker-compose.yml 文件)是否不同? nslookup 仅根据问题的当前描述和您的答案在我的 Mac (docker-compose version 1.29.2) 上找到网络 defaultbackend 的服务。可能在较新的 Docker Compose 版本中有所改变。
    • @maiermic 我猜 Docker 的名称解析一定发生了一些变化。我可以验证相同的设置是否无法正常工作,如我的回答中所述。 This 可能是相关的。
    【解决方案3】:

    如果您使用 docker swarm,您可以使用服务名称限定主机名以消除容器的歧义。但我不相信 docker-compose 会这样做。

    【讨论】:

    • 刚试过,docker-compose支持service.network去歧义。
    • 这很有用。我认为 Docker swarm 两者兼而有之。我想这取决于您是愿意耦合到服务还是网络。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多