如何告诉mac上的docker使用主机网络用于各种目的?

时间:2018-06-14 14:16:27

标签: docker docker-for-mac

如何告诉mac上的docker出于各种目的使用主机网络,以便我的docker容器可以通过localhost或127.0.0.1连接到主机上运行的任何服务?

Ran docker 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

2 个答案:

答案 0 :(得分:3)

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

官方文档中提到了这一点:https://docs.docker.com/network/network-tutorial-host/

  

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

您可以在Mac上使用--network host启动容器而不会出现错误,但是您无法获得预期的结果。

背后的原因是Docker for Mac和Windows应用程序使用虚拟机,而“host”表示此情况下的VM,而不是主机。

如果您想知道Docker将在Mac和Windows上实现这一点,请遵循此问题https://github.com/docker/for-mac/issues/2716

您可以在Docker论坛herehere上详细了解该主题。

完成图片:

  • 如果您正在开发常规Web应用程序,请使用-p或更好地查看用户定义的网络,docker-compose和Swarm或Kubernetes,以便您在构建应用程序时考虑到最终目的。
  • 如果您处于特殊情况,并且无论出于何种原因,也会在生产中使用--network host部署您的应用程序,最好在Linux计算机上进行开发。

答案 1 :(得分:0)

Mac上不支持Docker的主机网络功能,有趣的是docker run命令没有抱怨它。

因此从主机上,如果您尝试使用localhost:port例如在端口80上使用nginx时,您将得到错误,在Linux上也是如此。

Mac将出现以下错误:

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused