If we run docker run with -p 5000:5000, it will forward from all interfaces where the Docker daemon is running (for our purposes, the main network namespace) to the external IP address of the containter. Docker run port-forwarding (is not enough) How do we connect the two network namespaces? With Docker port-forwarding. The browser is connecting to 127.0.0.1 in the main, default network namespace.īut those are different interfaces, so no connection is made. Now it’s clear why there’s a connection refused: the server is listening on 127.0.0.1 inside the container’s network namespace. The resulting network setup looks like this: Your operating system has multiple network “interfaces”.įor example, on my computer (with output shortened for clarity): Docker runs on non-Linux OSes like macOS by running a Linux virtual machine, but the practical consequences are the same. I’m going to assume the main OS is Linux, for simplicity of explanation. Let’s start with our first scenario: you run a server directly inside your operating system, and then connect to it.
#Unix on mac vs connect to server how to#
How to fix your image so the server is accessible.What docker run -p 5000:5000 does, and why our example above doesn’t work.Networking namespaces, and how Docker uses them.To understand how to solve this, you need to know a minimal amount about how Docker’s networking works.
If you then try to connect with your browser to you’ll get connection refused or connection reset.