在Linux docker container里面, 如果想访问宿主机上的服务, 用 172.17.0.1 这个host即可.
今天在Mac上的 dockercontainer里面启动一个服务, 这个服务需要连我主机上的MySQL, 用 172.17.0.1 是访问不了的, Connection refused.
root@d99939cc53fc:/tmp# curl 172.17.0.1:3306 |
但是看网络结构, 和Linux的一样, 也是在172.17段下的.
root@d99939cc53fc:/tmp# ip addr |
不得其解, Google之, 发现有个隐藏奥秘, https://stackoverflow.com/questions/38504890/docker-for-mac-1-12-0-how-to-connect-to-host-from-container 问题下有人在 Docker Community Edition 17.06.0-ce-mac18, 2017-06-28 的release notes中发现有
Add an experimental DNS name for the host: docker.for.mac.localhost
这样一条更新日志.
页面搜索docker.for.mac.localhost
, 发现在 Docker Community Edition 17.12.0-ce-mac46 2018-01-09 的 release notes中发现有一条相关的更新日志
- DNS name
docker.for.mac.host.internal
should be used instead ofdocker.for.mac.localhost
(still valid) for host resolution from containers, since since there is an RFC banning the use of subdomains of localhost. See https://tools.ietf.org/html/draft-west-let-localhost-be-localhost-06.
所以, 结论就是在 container 中应该用 docker.for.mac.host.internal
来访问宿主机.
于是用curl看一下端口通不通, 果然通.
root@d99939cc53fc:/tmp# curl docker.for.mac.host.internal:3306 |