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