Skip to content

Docker Container Linking

This chapter covers how Docker containers communicate with each other, including networking, container linking, and service discovery.

Communication Methods Overview

MethodDescriptionRecommended
User-defined networksCommunication via Docker networks⭐⭐⭐ Recommended
--link parameterLegacy linking method⚠️ Deprecated
Shared network namespaceContainers share the same network stackSpecial cases
Host networkContainer uses host network directlySpecial cases

Create a Custom Network

bash
docker network create my-network
docker network ls
docker network inspect my-network

Connect Containers to a Network

bash
# 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:

bash
docker exec web ping db

Docker's built-in DNS server automatically resolves container names to IP addresses.

Example: Web App + Database

bash
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 is deprecated. Use custom networks instead.

bash
# 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:

bash
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

bash
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

bash
# 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

bash
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

Content is for learning and research only.