Networking features in Docker Desktop for Windows
预计阅读时间:4分钟
Docker Desktop 提供了几个网络功能,使其更易于使用.
Features
VPN Passthrough
连接到 VPN 时,Docker 桌面网络可以工作. 为此,Docker Desktop 拦截来自容器的流量并将其注入 Windows,就好像它来自 Docker 应用程序一样.
Port Mapping
当您使用-p
参数运行容器时,例如:
$ docker run -p 80:80 -d nginx
Docker Desktop 使容器中端口 80 上运行的任何内容(在本例中为nginx
)在localhost
的端口 80 上可用. 在此示例中,主机和容器端口是相同的. 如果您需要指定不同的主机端口怎么办? 例如,如果您已经在主机的端口 80 上运行了某些东西,则可以将容器连接到不同的端口:
$ docker run -p 8000:80 -d nginx
现在,到localhost:8000
的连接被发送到容器中的端口 80. -p
的语法是HOST_PORT:CLIENT_PORT
.
HTTP/HTTPS Proxy Support
See Proxies.
Known limitations, use cases, and workarounds
以下是 Docker Desktop for Windows 网络堆栈的当前限制的摘要,以及一些解决方法的想法.
There is no docker0 bridge on Windows
由于在 Docker Desktop for Windows 中实现网络的方式,您无法在主机上看到docker0
接口. 这个接口实际上是在虚拟机内部.
I cannot ping my containers
Docker Desktop for Windows 无法将流量路由到 Linux 容器. 但是,您可以 ping Windows 容器.
Per-container IP addressing is not possible
无法从 Windows 主机访问 docker (Linux) 桥接网络. 但是,它适用于 Windows 容器.
Use cases and workarounds
上述限制会影响两种情况:
I want to connect from a container to a service on the host
主机有一个不断变化的 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
I want to connect to a container from Windows
端口转发适用于localhost
; --publish
、 -p
或-P
都可以. 从 Linux 公开的端口被转发到主机.
我们目前的建议是发布一个端口,或者从另一个容器连接. 如果容器位于覆盖网络而不是桥接网络上,即使在 Linux 上,这也是您需要做的事情,因为这些没有路由.
例如,要运行nginx
网络服务器:
$ 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 命令.