如何告诉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
答案 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论坛here和here上详细了解该主题。
完成图片:
答案 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