繁体   English   中英

从docker容器访问主机dns

[英]Access host machine dns from a docker container

/我在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_URLservice-a执行HTTP请求

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

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

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

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

您可以使用docker-compose.yml文件中的“link”指令自动解析容器service-b中的地址。

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

你现在在服务的/ etc / hosts中有一行 - b说:

service-a 172.17.0.X

请注意,service-a将在编写应用程序时在service-b之前创建。 我不确定如何指定一个特殊的IP,但Docker的文档做得很好。 希望这就是你要找的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM