Dmi*_*iko 15 networking docker docker-swarm docker-swarm-mode
我无法mongodb
从docker swarm
群集连接到外部服务器.
据我了解这是因为集群使用覆盖网络驱动程序.我对吗?
如果没有,docker overlay驱动程序如何工作以及如何mongodb
从群集连接到外部服务器?
Fra*_*rel 21
问:docker overlay驱动程序如何工作?
我建议这个很好的参考,以了解docker swarm网络覆盖,以及更全面的Docker架构.
这表明:
Docker使用嵌入式DNS为在单个Docker引擎上运行的容器和在Docker Swarm中运行的任务提供服务发现.Docker Engine具有内部DNS服务器,可为用户定义的网桥,覆盖和MACVLAN网络中的主机上的所有容器提供名称解析.
每个Docker容器(或Swarm模式下的任务)都有一个DNS解析器,它将DNS查询转发给Docker Engine,后者充当DNS服务器.
因此,在多主机中docker swarm mode
,使用此示例设置:
在这个例子中,有一个叫两个容器的服务
myservice
.第二个服务(client
)存在于同一网络上.在client
执行其中的两个curl
进行docker.com和操作myservice
.这些是由此产生的结果:
- DNS查询由
client
fordocker.com
和发起myservice
.- 容器的内置解析器拦截DNS查询
127.0.0.11:53
并将它们发送到Docker Engine的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
Run Code Online (Sandbox Code Playgroud)
这里重要的是--dns=10.0.0.2
.10.0.0.2:53
如果无法解析VIP中的DNS名称,这将告诉Docker引擎默认使用DNS服务器.
最后,当你说:
我无法从docker swarm集群连接到外部mongodb服务器.据我了解这是因为集群使用覆盖网络驱动程序.我对吗?
我会说不,因为有一种内置方法docker engine
可以将未知的DNS名称转发overlay network
到您想要的DNS服务器.
希望这可以帮助!
归档时间: |
|
查看次数: |
6607 次 |
最近记录: |