什么是覆盖networking,DNSparsing如何工作?

我无法连接到我的docker swarm集中的外部mongodb服务器。

据我所知,这是因为群集使用覆盖networking驱动程序。 我对吗?

如果不是,docker overlay驱动程序是如何工作的,我怎样才能从集群连接到外部的mongodb服务器?

问:docker overlay驱动程序如何工作?

我会build议这个很好的参考,以了解docker群networking覆盖,以及更多的全球,如何docker架构 。

这说明:

Docker使用embedded式DNS为在单个Docker引擎上运行的容器以及在Docker Swarm中运行的任务提供服务发现。 Docker Engine有一个内部的DNS服务器,为用户定义的网桥,覆盖networking和MACVLANnetworking上的主机上的所有容器提供名称parsing。

每个Docker容器(或Swarm模式下的任务)都有一个DNSparsing器,用于将DNS查询转发到作为DNS服务器的Docker引擎。

因此,在多主机docker swarm mode ,通过以下示例设置:

建筑

在这个例子中有一个叫做myservice的两个容器的服务。 第二个服务( client )存在于同一个networking上。 client为docker.com和myservice执行两个curl操作。

这些是由此产生的行动:

  • DNS查询由clientdocker.commyservice启动。
  • 容器的内置parsing器拦截127.0.0.11:53上的DNS查询并将它们发送到Docker Engine的DNS服务器。
  • myserviceparsing为该服务的虚拟IP(VIP),该服务在内部对各个任务IP地址进行负载平衡。 容器名称也可以parsing,尽pipe直接到它们的IP地址。
  • docker.com在mynetnetworking中不存在作为服务名称,所以请求被转发到configuration的默认DNS服务器

回到你的问题:

我如何连接到外部MongoDB服务器表单集群?

对于你的外部mongodb (假设你有一个用于mongodb.mydomain.com的DNS),你和上面的架构中的client一样,想连接到docker.com ,除了你肯定不会“ t把mongodb.mydomain.com公开给整个networking,所以你可能已经在你的内部集群DNS服务器上声明了它。

那么,如何告诉docker引擎使用这个内部DNS服务器来parsingmongodb.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使用DNS服务器作为默认,如果它不能parsingVIP中的DNS名称。

最后,当你说:

我无法连接到我的Docker群集中的外部MongoDB服务器。 据我所知,这是因为群集使用覆盖networking驱动程序。 我对吗?

我会说不,因为在docker engine有一个内置的方法来转发来自overlay network未知DNS名称到你想要的DNS服务器。

希望这可以帮助!