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。文档在这一点上并没有充分说明,容易踩坑。
docker 18.03 加入了一个 feature,在容器中可以通过 host.docker.internal 来访问主机
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.
linux
有时候就需要在 docker 容器里访问宿主机提供的服务。
例如容器里的应用需要访问宿主机的 mysql 服务。
方案一:
宿主机执行 ifconfig
会看到 docker0 那个 ip,可以使用来访问宿主机
方案二:
docker 18.03 加入了一个 feature,在容器中可以通过 host.docker.internal
来访问主机
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.