Docker networking: bridge, host, and overlay networks

Ryan Nakamura Feb 2026
1 tab
#!/usr/bin/env bash
# Docker Networking Modes & Configuration

# === List networks ===
docker network ls
docker network inspect bridge

# === Create custom bridge network ===
# Containers on the same custom bridge can resolve each other by name
docker network create \
  --driver bridge \
  --subnet 172.20.0.0/16 \
  --gateway 172.20.0.1 \
  --opt com.docker.network.bridge.name=br-myapp \
  myapp-network

# Run containers on the custom network
docker run -d \
  --name api \
  --network myapp-network \
  --network-alias api-service \
  -e DATABASE_URL="postgres://db:5432/myapp" \
  myapp-api:latest

docker run -d \
  --name db \
  --network myapp-network \
  --network-alias db-service \
  -v pgdata:/var/lib/postgresql/data \
  postgres:16-alpine

# The 'api' container can reach 'db' by name:
# postgres://db:5432/myapp  ← Docker DNS resolves this

# === Connect a running container to another network ===
docker network create monitoring-network
docker network connect monitoring-network api
# Now 'api' is on both myapp-network and monitoring-network

docker network disconnect monitoring-network api

# === Host networking (Linux only) ===
# Container shares the host's network stack directly
# No port mapping needed — container binds directly to host ports
docker run -d \
  --name nginx-host \
  --network host \
  nginx:alpine

# === Overlay network for Docker Swarm ===
# Multi-host networking for Swarm services
docker network create \
  --driver overlay \
  --attachable \
  --subnet 10.10.0.0/16 \
  swarm-overlay

docker service create \
  --name web \
  --network swarm-overlay \
  --replicas 3 \
  -p 80:80 \
  nginx:alpine

# === Macvlan network ===
# Assign MAC addresses to containers — appear as physical devices
docker network create \
  --driver macvlan \
  --subnet 192.168.1.0/24 \
  --gateway 192.168.1.1 \
  -o parent=eth0 \
  macvlan-net

docker run -d \
  --name legacy-app \
  --network macvlan-net \
  --ip 192.168.1.100 \
  legacy-app:latest

# === Debugging network issues ===
# Inspect container network settings
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' api

# Check DNS resolution from inside a container
docker exec api nslookup db
docker exec api ping -c 3 db

# Run a temporary debug container on the same network
docker run --rm -it \
  --network myapp-network \
  nicolaka/netshoot \
  bash

# Inside netshoot:
# dig db-service
# tcpdump -i eth0 port 5432
# curl -v http://api-service:3000/health
1 file · bash Explain with highlit

Master Docker networking modes and custom network creation. Understand bridge networks for container isolation, host mode for direct host networking, and overlay networks for multi-host Swarm communication. Configure DNS resolution, port mapping, and inter-container connectivity.