Expose container port to Host using Docker for Windows in Windows 10

Gutemberg Ribeiro picture Gutemberg Ribeiro · Oct 31, 2016 · Viewed 10.8k times · Source

I've reading docker API and trying to create a simple container and expose 1 port.

In my example, I have an application that listen on TCP port 9595 inside the container and I want to access it from outside world (i.e. the host of the container) on port 9090.

When creating the container I have "ExposedPorts": { "9595/tcp: {}" } and the "PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }.

So, if I access from the Host machine http://container_internal_ip:9595 it works! However, when I access http://localhost:9090, which is what I expect using this port map feature, it doesn't work...

While running docker port containerID I have 9595/tcp -> 0.0.0.0:9090 and that should means, when connecting to any IP on the host, at port 9090, forward to the container in port 9595.

So, what is wrong here? Why can't I connect to 9090?

I appreciate any clarifications.

Answer

Carlos Rafael Ramirez picture Carlos Rafael Ramirez · Nov 1, 2016

Please post the docker command you are using.

You need an special treatment if you use Docker Toolbox or Docker for Windows. You should see localhost without problems (if your container is Linux). If you want your container be visible from outside, try this with Elevated Power Shell:

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

If your container is Windows however you won't see localhost and you need to use the container internal address:

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

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

Regards