从docker集装箱访问主机DNS

/我在Mac上使用Dockertesting版在service-a/docker-compose.yml设置了一些服务:

 version: '2' services: service-a: # ... ports: - '4000:80' 

然后,我在/etc/hosts设置了以下内容:

 ::1 service-a.here 127.0.0.1 service-a.here 

我有一个运行该代理服务器的nginx服务器到localhost:4000 。 所以在我的Mac上,我可以运行: curl http://service-a.here 。 这一切都很好。

现在,我正在构build另一个服务service-b/docker-compose.yml

 version: '2' services: service-b: # ... ports: - '4001:80' environment: SERVICE_A_URL: service-a.here 

service-b需要一些service-a

  1. 它需要将浏览器中的用户redirect到$SERVICE_A_URL
  2. 它需要使用$SERVICE_A_URL执行对service-a HTTP请求

有了这个设置,只有redirect(1.)有效。 HTTP请求(2.)不起作用,因为service-b容器在它的DNS中没有service-a.here概念。

我尝试使用add_hostsconfigurationvariables来添加service-a.here ,但是我并不是add_hosts它设置为什么。 localhost当然不会工作。

请注意,我真的想保持docker-compose文件分开(join他们不会解决我的问题的方式),因为他们已经有很多服务运行在他们的内部。

有没有一种方法可以在Docker容器内访问本地主机上的DNSparsing,以便例如curl service-a.here将从容器内部工作?

你可以在你的docker-compose.yml文件中使用'link'指令自动parsing你的容器服务的地址-b。

 service-b: image: blabla links: - service-a:service-a service-a: image: blablabla 

你现在将在你的service-b的/ etc / hosts中有一行:

 service-a 172.17.0.X 

并且请注意,在编写应用程序的同时,service-a将在service-b之前创build。 我不知道你怎么可以指定一个特殊的IP,但是Docker的文档做得很好。 希望这就是你要找的。