如何使用endpoint_mode = dnsrr从主机网络按服务名称进行查询

如何使用endpoint_mode = dnsrr从主机网络按服务名称进行查询

我正在 Swarm 集群环境中配置一些数据库以使用端点模式 = dnsrr

文档说(https://docs.docker.com/network/overlay/):

“Docker 主机上服务名称的 DNS 查询返回运行该服务的节点的 IP 地址列表”

我很难理解这句话的意思。

如果我使用 dig 来查询服务名称,我必须使用哪个 DNS 服务器?据我所知,Swarm 管理器(我将其理解为 docker 主机)没有运行 DNS 服务器。

我所知道的是,在覆盖网络内部,您可以使用 task.$servicename 进行解析,但是对于 dnsrr 和主机网络,如何完成?

答案1

我同意文档在这一点上并不完全清楚,但在以下示例中,我组成了一个包含两个容器副本的服务:

  webx:
    restart: on-failure
    build: ./web
    hostname: webx
    deploy:
        replicas: 2
        endpoint_mode: dnsrr

然后,打开控制台并使用服务名称运行 nslookup,我了解到 Docker 在内部将服务名称“webx”作为 DNS 处理,并且当我从另一个容器打开到 webx 的网络连接时,它会执行循环行为。

# nslookup webx
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   webx
Address: 172.20.0.6
Name:   webx
Address: 172.20.0.5

相关内容