VPN直通
连接到VPN时,适用于Mac的Docker桌面网络可以工作。为此,适用于Mac的Docker桌面会拦截来自容器的流量,并将其注入到Mac中,就像它源自Docker应用程序一样。
例如,使用
-p
参数运行容器时:
$ docker run -p 80:80 -d nginx
Docker Desktop for Mac使在localhost端口80上可用的容器(在本例中为nginx )端口80上运行的任何内容。在此示例中,主机端口和容器端口相同。如果需要指定其他主机端口怎么办?例如,如果您已经在主机的端口80上运行了某些设备,则可以将容器连接到其他端口:
$ docker run -p 8000:80 -d nginx
现在,到localhost:8000连接将发送到容器中的端口80。-p的语法为HOST_PORT:CLIENT_PORT 。
HTTP / HTTPS代理支持
请参阅代理 。
已知限制,用例和解决方法
以下是Docker Desktop for Mac网络堆栈上当前限制的摘要,以及一些解决方法的想法。
macOS上没有docker0桥
由于在Mac版Docker桌面中实施联网的方式,您无法在主机上看到docker0接口。该接口实际上在虚拟机中。
我无法ping我的容器
Mac版Docker桌面无法将流量路由到容器。
每个容器的IP寻址是不可能的
无法从macOS主机访问docker(Linux)桥接网络。
用例和解决方法
上述限制会影响两种情况:
我想从容器连接到主机上的服务
主机的IP地址正在更改(如果没有网络访问权限,则没有IP地址)。从18.03开始,我们的建议是连接到特殊的DNS名称host.docker.internal ,该名称解析为主机使用的内部IP地址。这是出于开发目的,不适用于Docker Desktop for Mac以外的生产环境。
网关也可以通过gateway.docker.internal到达。
我想从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
有关与docker run使用的发布选项的更多详细信息,请参见run命令 。
Mac , 网络