在Windows 10中使用Docker for Windows公开容器端口到主机

我已经阅读docker API,并试图创build一个简单的容器,并显示1端口。

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

创build容器时,我有"ExposedPorts": { "9595/tcp: {}" }"PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }

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

当运行docker port containerID我有9595/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?

我赞赏任何澄清。

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

如果您使用Docker Toolbox或Docker for Windows,则需要特殊处理。 你应该看到没有问题的本地主机 (如果你的容器是Linux的话)。 如果你想从外面看到你的容器,那么试试这个boost的功率shell:

 netsh interface portproxy add v4tov4 listenaddress=yourip listenport=9090 connectaddress=10.0.75.1 connectport=9090 

如果你的容器是Windows,但是你不会看到本地主机 ,你需要使用容器的内部地址:

 docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <cointainerid> 

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

问候

端口确实正如预期的那样暴露在“外部世界”中,由于当前的Windowsnetworking限制,它正好在容器主机自身的环回接口(localhost或127.0.0.1)上无法访问。 不要试图通过容器主机上的回送接口访问它,而是尝试使用容器主机ip和容器暴露的端口号从networking上的另一台机器访问它。

这里有一个很好的写法https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/