我无法从集群连接到外部mongodb
服务器。docker swarm
据我了解,这是因为集群使用了覆盖网络驱动程序。我对吗?
如果没有,docker overlay 驱动程序如何工作,如何mongodb
从集群连接到外部服务器?
我无法从集群连接到外部mongodb
服务器。docker swarm
据我了解,这是因为集群使用了覆盖网络驱动程序。我对吗?
如果没有,docker overlay 驱动程序如何工作,如何mongodb
从集群连接到外部服务器?
问:docker 覆盖驱动程序如何工作?
我会推荐这个很好的参考来了解 docker swarm 网络覆盖,以及更广泛地了解 Docker 的架构。
这表明:
Docker 使用嵌入式 DNS 为在单个 Docker 引擎上运行的容器和在 Docker Swarm 中运行的任务提供服务发现。Docker 引擎有一个内部 DNS 服务器,它为用户定义的桥接、覆盖和 MACVLAN 网络中主机上的所有容器提供名称解析。
每个 Docker 容器(或 Swarm 模式下的任务)都有一个 DNS 解析器,它将 DNS 查询转发到 Docker 引擎,后者充当 DNS 服务器。
因此,在多主机docker swarm mode
中,使用此示例设置:
在此示例中,有两个容器的服务称为
myservice
. 第二个服务 (client
) 存在于同一网络上。对docker.com 和client
执行两个操作。curl
myservice
这些是产生的动作:
- DNS 查询由
client
fordocker.com
和发起myservice
。- 容器的内置解析器拦截 DNS 查询
127.0.0.11:53
并将它们发送到 Docker 引擎的 DNS 服务器。myservice
解析为该服务的虚拟 IP (VIP),该服务在内部负载平衡到各个任务 IP 地址。容器名称也可以解析,尽管直接解析为它们的 IP 地址。docker.com
在 mynet 网络中不作为服务名称存在,因此请求被转发到配置的默认 DNS 服务器。
回到你的问题:
如何从集群连接到外部 mongodb 服务器?
对于您的外部mongodb
(假设您有一个 DNS mongodb.mydomain.com
),您与上述架构中的情况相同client
,想要连接到docker.com
,除了您当然不想将其暴露mongodb.mydomain.com
给整个网络,所以您可能已经在内部集群 DNS 服务器中声明了它。
那么,如何告诉 docker 引擎使用这个内部 DNS 服务器来解析mongodb.mydomain.com
呢?
你必须在你的docker service
任务中指明你想使用一个内部 DNS 服务器,像这样:
docker service create \
--name myservice \
--network my-overlay-network \
--dns=10.0.0.2 \
myservice:latest
这里重要的是--dns=10.0.0.2
。这将告诉 Docker 引擎在10.0.0.2:53
无法解析 VIP 中的 DNS 名称时默认使用 DNS 服务器。
最后,当你说:
我无法从我的 docker swarm 集群连接到外部 mongodb 服务器。据我了解,这是因为集群使用了覆盖网络驱动程序。我对吗?
我会说不,因为有一个内置方法docker engine
可以将来自overlay network
您想要的 DNS 服务器的未知 DNS 名称转发。
希望这可以帮助!