Docker for mac 1.12.0:如何从容器

时间:2016-07-21 12:56:21

标签: macos docker virtualization

我在os x 10.10上更新了docker,所以它现在使用os x本机虚拟化。但是,我发现从我的nginx容器中连接到我的主机很棘手。我试过这个:

/sbin/ip route|awk '/default/ { print $3 }'

得到了答案:

172.17.0.1

然后我在docker-compose.yml中使用了这个ip:

  extra_hosts:
    - "master:172.17.0.1" 

但是我仍然遇到错误:

172.17.0.1 - - [21/Jul/2016:09:33:46 +0000] "GET /api HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" "-" 2016/07/21 09:33:46 [error] 7#7: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: soc-credit.ru, request: "GET /api HTTP/1.1", upstream: "http://172.17.0.5:8080/api", host: "localhost"

请注意这一部分:client: 172.17.0.1。由于我已经从主机发出请求,它证明我在第一步中获得的ip是正确的。但无论如何都没有建立联系。

我想强调一下,我在连接FROM WITHIN容器到主机时遇到问题,反之亦然。

我做错了什么?谢谢!

4 个答案:

答案 0 :(得分:13)

遇到同样的问题,并且在Docker和网络配置方面缺乏经验,我努力让各种提议的解决方案起作用。但是,自从Docker for Mac更新以来: Docker Community Edition 17.06.0-ce-mac18, 2017-06-28 (stable) 我发现使用了'实验'主机名docker.for.mac.localhost 允许我从容器内联系Mac主机上运行的服务。对开发非常有用!

答案 1 :(得分:8)

我遇到了同样的问题而且我找到了这个

https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds

注意段落'我想从容器连接到主机上的服务'

我还没有尝试过,因为我正在寻找一个更具体的解决方案(除了在我的地址中添加别名之外)...

如果有人有什么问题请通知!

答案 2 :(得分:1)

最新:DNS名称host.docker.internal应该用于容器的主机解析。旧的别名(仍然有效)不赞成使用此别名。 (见https://tools.ietf.org/html/draft-west-let-localhost-be-localhost-06)。 应使用docker.for.mac.host.internal代替Docker Community Edition 17.12.0-ce-mac46 2018-01-09中的docker.for.mac.localhost。 这允许您从docker容器中连接到您的Mac上运行的服务。请参阅下面的链接

understanding the docker.for.mac.localhost behavior

release notes

答案 3 :(得分:1)

从docker 18.03起,官方建议连接到特殊的DNS名称host.docker.internal,该名称解析为主机使用的内部IP地址,这是出于开发目的,请参考https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds