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

时间:2016-10-31 20:14:42

标签: 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 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?

我感谢任何澄清。

2 个答案:

答案 0 :(得分:5)

该港口确实暴露在外面的世界中。正如预期的那样,由于当前的Windows网络限制,它恰好无法从环回接口(localhost或127.0.0.1)上的容器主机本身访问。而不是尝试通过容器主机上的环回接口访问它,尝试使用容器主机ip和容器公开的端口号从网络上的另一台机器访问它。

https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/

有一个很好的写作

答案 1 :(得分:3)

请发布您正在使用的泊坞窗命令。

如果您使用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

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

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

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

此致