在Windows 10中使用Docker for Windows将容器端口暴露给主机

Gut*_*iro 14 docker docker-for-windows

我正在阅读docker API并尝试创建一个简单的容器并公开1个端口.

在我的示例中,我有一个应用程序,它侦听容器内的TCP端口9595,我想从外部世界(即容器的主机)端口访问它9090.

在创建容器我有"ExposedPorts": { "9595/tcp: {}" }"PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }.

所以,如果我从主机上访问http://container_internal_ip:9595它的工作原理!但是,当我访问时http://localhost:9090,这是我期望使用此端口映射功能,它不起作用...

在跑步的时候,docker port containerID9595/tcp -> 0.0.0.0:9090应该这意味着,when connecting to any IP on the host, at port 9090, forward to the container in port 9595.

那么,这里有什么问题?为什么我不能连接到9090?

我感谢任何澄清.

Car*_*rez 5

请发布您正在使用的 docker 命令。

如果您使用 Docker Toolbox 或 Docker for Windows,则需要特殊处理。您应该可以毫无问题地看到localhost(如果您的容器是 Linux)。如果您希望您的容器从外面可见,请尝试使用 Elevated Power Shell:

netsh interface portproxy add v4tov4 listenaddress=yourip listenport=9090 connectaddress=10.0.75.1 connectport=9090
Run Code Online (Sandbox Code Playgroud)

但是,如果您的容器是 Windows,您将看不到localhost,您需要使用容器内部地址:

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <cointainerid>
Run Code Online (Sandbox Code Playgroud)

参考:https : //blog.docker.com/2016/09/build-your-first-docker-windows-server-container/

问候


小智 5

该端口确实正按预期暴露在“外部世界”中,由于当前的Windows网络限制,恰好无法从环回接口(本地主机或127.0.0.1)上的容器主机本身访问该端口。与其尝试通过容器主机上的环回接口访问它,不如尝试使用容器主机ip和容器暴露的端口号从网络上的另一台计算机上访问它。

https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/上有一个很好的文章