我正在 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