Mac版Docker桌面中的网络功能
预计阅读时间:4分钟
用于Mac的Docker桌面提供了多种联网功能,使其更易于使用。
特征
VPN直通
连接到VPN时,适用于Mac的Docker桌面网络可以正常工作。为此,适用于Mac的Docker桌面会拦截来自容器的流量,并将其注入Mac中,就像它是源自Docker应用程序一样。
端口映射
使用-p
参数运行容器时,例如:
$ docker run -p 80:80 -d nginx
Docker Desktop for Mac使容器中端口80(在本例中为nginx
)上运行的任何内容都在的端口80上可用localhost
。在此示例中,主机端口和容器端口相同。如果需要指定其他主机端口怎么办?例如,如果您已经在主机的端口80上运行了某些设备,则可以将容器连接到其他端口:
$ docker run -p 8000:80 -d nginx
现在,到localhost:8000
的连接将发送到容器中的端口80。语法为-p
IS HOST_PORT:CLIENT_PORT
。
HTTP / HTTPS代理支持
请参阅代理。
已知限制,用例和解决方法
以下是Docker Desktop for Mac网络堆栈上当前限制的摘要,以及一些解决方法的想法。
macOS上没有docker0桥
由于在Mac版Docker桌面中实施联网的方式,因此您无法docker0
在主机上看到
接口。该接口实际上在虚拟机中。
我无法ping我的容器
Mac版Docker桌面无法将流量路由到容器。
每个容器的IP寻址是不可能的
无法从macOS主机访问docker(Linux)桥接网络。
用例和解决方法
上述限制会影响两种情况:
我想从容器连接到主机上的服务
主机的IP地址正在更改(如果没有网络访问权限,则没有IP地址)。我们建议您连接到特殊的DNS名称host.docker.internal
,该名称
解析为主机使用的内部IP地址。这是出于开发目的,不适用于Docker Desktop for Mac以外的生产环境。
您也可以使用来访问网关gateway.docker.internal
。
如果您在计算机上安装了Python,请按照以下说明作为示例,从容器连接到主机上的服务:
-
运行以下命令以在端口8000上启动简单的HTTP服务器。
python -m http.server 8000
如果您已安装Python 2.x,请运行
python -m SimpleHTTPServer 8000
。 -
现在,运行一个容器,安装
curl
,并尝试使用以下命令连接到主机:$ docker run --rm -it alpine sh # apk add curl # curl http://host.docker.internal:8000 # exit
我想从Mac连接到容器
港口转运工程localhost
; --publish
,-p
或-P
所有的工作。从Linux公开的端口将转发到主机。
我们当前的建议是发布端口,或从另一个容器连接。如果容器位于覆盖网络而不是桥接网络上,那么即使在Linux上,这也是您需要执行的操作,因为这些容器未路由。
入门中nginx
显示的用于运行Web服务器的命令
就是其中的一个示例。
$ docker run -d -p 80:80 --name webserver nginx
为了阐明语法,以下两个命令都将80
容器上的端口公开给8000
主机上的端口:
$ docker run --publish 8000:80 --name webserver nginx
$ docker run -p 8000:80 --name webserver nginx
要公开所有端口,请使用该-P
标志。例如,以下命令启动容器(以分离模式),-P
并将容器上的所有端口公开给主机上的随机端口。
$ docker run -d -P --name webserver nginx
有关与一起使用的发布选项的更多详细信息,请参见run命令docker run
。