首页 > 解决方案 > 如何告诉 Mac 上的 docker 出于所有目的使用主机网络?

问题描述

如何告诉 Mac 上的 docker 将主机网络用于所有目的,以便我的 docker 容器可以通过 localhost 或 127.0.0.1 连接到主机上运行的任何服务?

Randocker run --net=host -it myimage和容器无法通过 localhost 连接到主机上运行的任何东西。我收到连接被拒绝错误。

docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true

标签: dockerdocker-for-mac

解决方案


主机网络驱动程序将以您期望的方式在 Linux 上运行,但它不会为您提供您在 Mac 和 Windows 上寻找的内容。

它在官方文档中提到:https ://docs.docker.com/network/network-tutorial-host/ 。

主机网络驱动程序仅适用于 Linux 主机,不支持 Docker for Mac、Docker for Windows 或 Docker EE for Windows Server。

您可以--network host在 Mac 上启动容器而不会出现错误,但不会得到您期望的结果。

这背后的原因是 Docker for Mac 和 Windows 应用程序在后台使用虚拟机,而“主机”在这种情况下是指 VM,而不是您的主机。

如果您想知道 Docker 是否会在 Mac 和 Windows 上实现此功能,请关注此问题https://github.com/docker/for-mac/issues/2716

您可以在此处此处的 Docker 论坛上阅读有关该主题的更多信息。

完成图片:

  • 如果您正在开发常规的 Web 应用程序,请使用 -p 或者最好查看用户定义的网络、docker-compose 和 Swarm 或 Kubernetes,以便您在构建应用程序时牢记目标。
  • 如果您处于特殊情况,并且出于任何原因将使用 --network host 在生产中部署您的应用程序,最好在 Linux 机器上进行开发。

推荐阅读