docker内部访问宿主机

有时候需要在docker容器里访问宿主机提供的某些服务。如:容器里的应用需要访问宿主机的MySQL服务。

方法介绍
1
Use your internal IP address or connect to the special DNS name host.docker.internal which will resolve to the internal IP address used by the host.
  • 方法1:
    宿主机执行ifconfig,找到docker0网卡对应的IP,可以使用这个IP来访问宿主机。

  • 方法2:
    docker 18.03加入了一个feature,在容器中可以通过 host.docker.internal来访问主机。

Docker For Mac没有docker0网桥的问题

在使用 Docker 时,要注意平台之间实现的差异性,如 Docker For Mac 的实现和标准 Docker 规范有区别,Docker For Mac 的 Docker Daemon 是运行于虚拟机 (xhyve) 中的,而不是像 Linux 上那样作为进程运行于宿主机,因此 Docker For Mac 没有 docker0 网桥,不能实现 host 网络模式,host 模式会使 Container 复用 Daemon 的网络栈 (在 xhyve 虚拟机中),而不是与 Host >主机网络栈,这样虽然其它容器仍然可通过 xhyve 网络栈进行交互,但却不是用的 Host 上的端口 (在 Host 上无法访问)。bridge 网络模式 -p 参数不受此影响,它能正常打开 Host 上的端口并映射到 Container 的对应 Port。文档在这一点上并没有充分说>明,容易踩坑。