Docker Container Linking
This chapter covers how Docker containers communicate with each other, including networking, container linking, and service discovery.
Communication Methods Overview
User-Defined Networks (Recommended)
Create a Custom Network
docker network create my-network
docker network ls
docker network inspect my-network
Connect Containers to a Network
# Specify network at startup
docker run -d --name web --network my-network nginx
docker run -d --name db --network my-network -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
# Connect existing container
docker network connect my-network existing-container
# Disconnect
docker network disconnect my-network existing-container
Communicate by Container Name
Containers on the same custom network can reach each other by name:
Docker's built-in DNS server automatically resolves container names to IP addresses.
Example: Web App + Database
docker network create app-network
docker run -d \
--name mysql-db \
--network app-network \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=myapp \
mysql:8.0
docker run -d \
--name web-app \
--network app-network \
-p 8080:8080 \
-e DB_HOST=mysql-db \
-e DB_PORT=3306 \
my-web-app
--link Method (Deprecated)
⚠️ --link is deprecated. Use custom networks instead.
# Old way (not recommended)
docker run -d --name db mysql:8.0
docker run -d --name web --link db:database nginx
Limitations: one-directional only, no cross-host support, no dynamic service discovery.
Shared Network Namespace
Multiple containers can share the same network namespace:
docker run -d --name pod-main nginx
docker run -d --name pod-sidecar --network container:pod-main busybox sleep 3600
This is similar to the Kubernetes Pod network model.
Port Mapping
docker run -d -p 8080:80 nginx # Specific port
docker run -d -p 127.0.0.1:8080:80 nginx # Specific IP
docker run -d -P nginx # Random port
docker port my-nginx # View mappings
Accessing Host Services from Containers
# Use host.docker.internal (Docker 20.10+)
docker run -it --add-host=host.docker.internal:host-gateway alpine ping host.docker.internal
Network Management Commands
docker network create my-net
docker network ls
docker network inspect my-net
docker network connect my-net container-name
docker network disconnect my-net container-name
docker network rm my-net
docker network prune
Chapter Summary
Container linking is fundamental to building multi-container applications. Use custom Docker networks for container communication — they provide automatic DNS resolution, network isolation, and flexible management.
Further Reading