从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
:
- 它需要将浏览器中的用户redirect到
$SERVICE_A_URL
- 它需要使用
$SERVICE_A_URL
执行对service-a
HTTP请求
有了这个设置,只有redirect(1.)有效。 HTTP请求(2.)不起作用,因为service-b
容器在它的DNS中没有service-a.here
概念。
我尝试使用add_hosts
configurationvariables来添加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的文档做得很好。 希望这就是你要找的。