Ever wondered how Docker runs two containers exposing the same port without any conflict?

Devi Sri PrasadDevi Sri Prasad
2 min read

Recently, I ran two Redis containers using Docker:

docker run -d redis  
docker run -d redis:7.4-alpine

Both containers use port 6379 internally, and yet, there were no errors or conflicts. That’s when I started thinking about Docker networking and port binding — and it all started to make sense.


Understanding Docker Networking

Docker uses OS-level virtualization to run software in lightweight units called containers. Each container acts like a mini virtual machine with its own processes, and network stack. This means containers can listen on the same port (like 6379) without interfering with each other — because they are isolated from the host and from each other by default.

So yes, you can have two containers both exposing port 6379 internally.


Host-to-Container Port Binding

However, things change when you bind a container port to your host machine’s port using the -p option:

docker run -d -p 6000:6379 redis

This command maps the host’s port 6000 to the container’s port 6379. But now imagine doing this again with the same host port:

docker run -d -p 6000:6379 redis

This will fail because your host can’t bind two different containers to the same port (6000). The host sees it as a conflict — it’ll throw an error like:

docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint inspiring_lamarr (528d5cd5f422db422d0c8f7def91c6743d6f571f31edc4f6c0330763d939fc42): Bind for 0.0.0.0:6001 failed: port is already allocated

So, when mapping ports from container to host, you must choose different host ports:

docker run -d -p 6000:6379 redis
docker run -d -p 6001:6379 redis

Now both containers work fine, with Redis running inside each on port 6379, and the host routing traffic from 6000 and 6001 to them respectively.


💡 Final Thoughts

This simple Redis experiment gave me a deeper understanding of how Docker containerization, network isolation, and port binding work. I hadn’t thought about virtualization when I ran into the port issue — but now I see how each container acts like its own mini-environment, complete with its own ports.


✅ Summary

  • Containers can expose the same internal port without conflict.

  • Host port binding must be unique per service.

  • Port conflicts only occur on the host, not inside Docker's virtual network.


1
Subscribe to my newsletter

Read articles from Devi Sri Prasad directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Devi Sri Prasad
Devi Sri Prasad