Docker Community Forums

Share and learn in the Docker community.

Cannot expose a container on windows when using --network=host

Dear docker community,
I am running docker on windows.
I have a running container which Istarted with the command

docker run -it --network=host -p 80:80 opc-backend

However I cannot reach the webserver in this container, I get no response back when trying to reach localhost in my browser.

On the other hand it works when I issue the command

docker run -it -p 80:80 opc-backend (basically the same command but without --network=host)

…and I can see my webpage just fine on http://localhost

I would like to have all my ports exposed to my container with the first command as it works just fine on Linux

Any help would be appreciated.

Thank you in advance

If you use the host network mode for a container, that container’s network stack is not isolated from the Docker host (the container shares the host’s networking namespace), and the container does not get its own IP-address allocated. For instance, if you run a container which binds to port 80 and you use host networking, the container’s application is available on port 80 on the host’s IP address.

Note: Given that the container does not have its own IP-address when using host mode networking, port-mapping does not take effect, and the -p, --publish, -P, and --publish-all option are ignored, producing a warning instead:

WARNING: Published ports are discarded when using host network mode
Host mode networking can be useful to optimize performance, and in situations where a container needs to handle a large range of ports, as it does not require network address translation (NAT), and no “userland-proxy” is created for each port.

The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server.

You can also use a host network for a swarm service, by passing --network host to the docker service create command. In this case, control traffic (traffic related to managing the swarm and the service) is still sent across an overlay network, but the individual swarm service containers send data using the Docker daemon’s host network and ports. This creates some extra limitations. For instance, if a service container binds to port 80, only one service container can run on a given swarm node.