从docker容器访问主机dns

时间:2016-06-30 17:17:41

标签: docker docker-compose docker-machine

/我在mac上使用docker beta并在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服务器运行代理service-a.herelocalhost:4000。 所以在我的Mac上我可以运行:curl http://service-a.here。一切都很好。

现在,我正在构建另一项服务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. 需要将浏览器中的用户重定向到$SERVICE_A_URL
  2. 它还需要使用service-a
  3. $SERVICE_A_URL执行HTTP请求

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

    我尝试使用service-a.here配置变量添加add_hosts,但我不知道要将其设置为什么。 localhost当然不起作用。

    请注意,我真的希望将docker-compose文件分开(加入它们不会解决我的问题),因为它们都已经在其中运行了很多服务。

    是否有办法从docker容器内访问localhost上的DNS解析,以便例如curl service-a.here可以在容器内部工作?

1 个答案:

答案 0 :(得分:0)

您可以使用'链接' docker-compose.yml文件中的指令,用于自动解析容器service-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之前创建。我不确定在指定特殊IP之后你怎么做,但Docker的文档做得很好。希望这是你想要的。

相关问题