Docker Port Mapping Explained

Photo by Rubaitul Azad on Unsplash

Port mapping in Docker is the process of mapping a port on the host machine to a port in the container. This is essential for accessing applications running inside containers from outside the Docker host.

The Need for Port Mapping

  • Isolation: Containers have their own network stack, separate from the host.
  • Conflict Avoidance: Multiple containers can run the same service on the same port without conflicts on the host machine.
  • Security: Limits access to the containerized applications.

How Port Mapping Works

Imagine you have a web server running inside a Docker container on port 3000. By default, this port is only accessible within the Docker network and not from your host machine or the external network.

To make this server accessible outside the container, you need to forward a port from the host to the container.

Example:

docker run -p [HOST_PORT]:[CONTAINER_PORT] [IMAGE]

Here, -p is the flag used to specify port mapping.

Forwarding Port 3000

For a server running on port 3000 in the container:

docker run -p 3000:3000 [IMAGE]

This command maps port 3000 of the host to port 3000 of the container.

Accessing the Containerized Application

After setting up port forwarding, any request sent to port 3000 on the host machine is automatically forwarded to port 3000 in the container.

Now, the server running inside the container is accessible via http://localhost:3000 or http://[HOST_IP]:3000.

Best Practices for Port Forwarding

  1. Choose Non-Standard Host Ports: Avoid using common ports on the host to reduce security risks and conflicts.
  2. Consistency in Development and Production: Keep port mappings consistent across development and production environments for simplicity.
  3. Document Port Mappings: Maintain clear documentation of which host ports map to which container ports.

,