Docker for mac 1.12.0:如何从容器连接到主机
Docker for mac 1.12.0: how to connect to host from container
我已经在我的 os x 10.10 上更新了 docker,所以它现在使用 os x 本机虚拟化。但是,我发现从我的 nginx 容器中连接到我的 host 机器很棘手。我试过这个:
/sbin/ip route|awk '/default/ { print }'
得到答案:
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
。由于我已经向host机器发出了请求,所以证明我第一步得到的ip是正确的。但是无论如何都没有建立连接。
我想强调的是,我在从 WITHIN container 连接到 host 时遇到了问题,反之亦然。
我做错了什么?谢谢!
我遇到了同样的问题,我找到了这个
https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
通知段'I want to connect from a container to a service on the host'
我还没有尝试过,因为我正在寻找更具体的解决方案(除了向我的 lo 地址添加别名之外)...
如果有人有东西请告知!
遇到了同样的问题,并且在 Docker 和网络配置方面缺乏经验,我努力让各种建议的解决方案发挥作用。然而,自从 Docker 更新为 Mac 以来:
Docker 社区版 17.06.0-ce-mac18,2017-06-28(稳定)
我发现使用 'experimental' 主机名 docker.for.mac.localhost
允许我从容器内联系 Mac 主机上的服务 运行。对开发非常有用!
latest:DNS 名称 host.docker.internal 应该用于容器的主机解析。较旧的别名(仍然有效)已弃用,取而代之的是这个。 (参见 https://datatracker.ietf.org/doc/html/draft-west-let-localhost-be-localhost-06)。
应该使用 docker.for.mac.host.internal 而不是 Docker 社区版 17.12.0-ce-mac46 2018-01-09 中的 docker.for.mac.localhost。
这允许您在 mac 上从 docker container.please 中连接到服务 运行,请参阅下面的链接
从docker18.03开始,官方建议连接特殊的DNS名称host.docker.internal
,解析为主机使用的内部IP地址,这是为了开发目的,参考https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
我已经在我的 os x 10.10 上更新了 docker,所以它现在使用 os x 本机虚拟化。但是,我发现从我的 nginx 容器中连接到我的 host 机器很棘手。我试过这个:
/sbin/ip route|awk '/default/ { print }'
得到答案:
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
。由于我已经向host机器发出了请求,所以证明我第一步得到的ip是正确的。但是无论如何都没有建立连接。
我想强调的是,我在从 WITHIN container 连接到 host 时遇到了问题,反之亦然。
我做错了什么?谢谢!
我遇到了同样的问题,我找到了这个
https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
通知段'I want to connect from a container to a service on the host'
我还没有尝试过,因为我正在寻找更具体的解决方案(除了向我的 lo 地址添加别名之外)...
如果有人有东西请告知!
遇到了同样的问题,并且在 Docker 和网络配置方面缺乏经验,我努力让各种建议的解决方案发挥作用。然而,自从 Docker 更新为 Mac 以来:
Docker 社区版 17.06.0-ce-mac18,2017-06-28(稳定)
我发现使用 'experimental' 主机名 docker.for.mac.localhost
允许我从容器内联系 Mac 主机上的服务 运行。对开发非常有用!
latest:DNS 名称 host.docker.internal 应该用于容器的主机解析。较旧的别名(仍然有效)已弃用,取而代之的是这个。 (参见 https://datatracker.ietf.org/doc/html/draft-west-let-localhost-be-localhost-06)。 应该使用 docker.for.mac.host.internal 而不是 Docker 社区版 17.12.0-ce-mac46 2018-01-09 中的 docker.for.mac.localhost。 这允许您在 mac 上从 docker container.please 中连接到服务 运行,请参阅下面的链接
从docker18.03开始,官方建议连接特殊的DNS名称host.docker.internal
,解析为主机使用的内部IP地址,这是为了开发目的,参考https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds