Docker-compose容器使用主机DNS服务器

我在“定制”桥梁networking中的“Ubuntu 16.10服务器”上运行了多个容器,编写了2.9(在yml版本2.1中)。 我的大部分容器在内部都使用相同的端口,因此我无法使用“主机”networking驱动程序。 我的容器都链接在一起,使用专用的links属性。

但是,我也需要访问暴露在我的容器外面的服务。 这些服务具有在我公司的DNS服务器中注册名称的专用URL。 虽然我没有问题,使用公共DNS,并从我的容器内达到任何公共服务,我只是无法达到我的私人DNS。

请问,你知道一个工作解决scheme使用私人DNS从容器? 或者甚至更好,使用主机的networkingDNSconfiguration?

PS:当然,我可以使用extra_hosts -compose.yml文件中服务的extra_hosts属性链接到我公司的服务。 但是…这绝对不是拥有DNS的目标。 我不想在我的YML文件中注册我的所有服务,我不想每次在我公司更新服务的IP时更新它。

背景:

  • 主机:Ubuntu 16.10服务器
  • Docker引擎:1.12.6
  • Docker撰写:1.9.0
  • docker-compose.yml:2.1
  • networking:自己的桥梁。

docker-compose.yml文件(解压):

 version: '2.1' services: nexus: image: sonatype/nexus3:$NEXUS_VERSION container_name: nexus restart: always hostname: nexus.$URL ports: - "$NEXUS_81:8081" - "$NEXUS_443:8443" extra_hosts: - "repos.private.network:192.168.200.200" dns: - 192.168.3.7 - 192.168.111.1 - 192.168.10.5 - 192.168.10.15 volumes_from: - nexus-data networks: - pic networks: pic: driver: bridge ipam: driver: default config: - subnet: 172.18.0.0/16 gateway: 172.18.0.1 

我尝试了和没有ipamconfiguration的picnetworking,没有任何运气。

testing和结果: docker exec -ti nexus curl repos.private.network正确地返回这个服务提供的HTML页面

docker exec -ti nexus curl another-service.private.network返回curl: (6) Could not resolve host: another-service.private.network; Name or service not known curl: (6) Could not resolve host: another-service.private.network; Name or service not known从主机curl another-service.private.network返回相应的HTML页面。

而“当然” another-service.private.network在我的4个DNS服务器(192.168.3.7,19​​2.168.111.1,192.168.10.5,192.168.10.15)中是已知的。

干杯,奥利维尔

你不指定你运行docker-compose的环境,例如Mac,Windows或Unix,所以它将取决于需要做什么更改。 您也不指定是否在用户创build的网桥上的泊坞窗中使用默认网桥。

无论哪种情况,默认情况下,Docker都应该尝试将Docker主机的DNSparsing映射到容器中。 因此,如果您的Docker主机可以parsing私有DNS地址,那么理论上您的容器也应该可以。

我build议阅读这个官方的Docker DNS文档,因为这是非常合理的。 这里是默认的Docker桥接networking, 这里是用户创build的桥接networking。

一个小问题是,如果你使用Docker for Mac,Docker Machine或者Docker for Windows来运行,你需要记住你的Docker Host实际上是在你的机器上运行的VM,而不是物理盒本身,所以你需要确保VM具有正确的DNSparsing选项集。 您将需要重新启动您的容器以更改DNSparsing以供他们选取。

您当然可以使用docker-compose覆盖所有的默认设置。 它有显式设置DNS服务器,DNSsearch选项等的完整选项。举个例子:

 version: 2 services: application: dns: - 8.8.8.8 - 4.4.4.4 - 192.168.9.45 

你会在这里find这些function的文档。