Docker Netzwerkmodi im Überblick
Docker stellt fünf Netzwerktreiber bereit:
| Treiber | Beschreibung | Typischer Einsatz |
|---|---|---|
| bridge | Privates Netz auf dem Host | Standard für einzelne Container |
| host | Container teilt Host-Netzwerk | Maximale Performance |
| none | Kein Netzwerk | Security-Isolation |
| overlay | Multi-Host-Netzwerk | Docker Swarm |
| macvlan | Eigene MAC-Adresse | Legacy-Apps im LAN |
Bridge-Netzwerk (Standard)
Jeder Container bekommt eine eigene IP im privaten Docker-Subnet (172.17.0.0/16):
# Alle Netzwerke anzeigen
docker network ls
# Standard bridge inspizieren
docker network inspect bridge
# Benutzerdefiniertes Bridge-Netz erstellen (empfohlen!)
docker network create --driver bridge \
--subnet 172.20.0.0/16 \
--ip-range 172.20.240.0/20 \
mein-netz
# Container im neuen Netz starten
docker run -d --name db --network mein-netz postgres:16
docker run -d --name app --network mein-netz myapp:latest
# Container im selben benutzerdefinierten Netz
# können sich per Name ansprechen:
# app → db:5432 funktioniert direkt
Wichtig: Im Standard-bridge-Netz kein DNS. In benutzerdefinierten Netzen wird automatisch DNS aktiviert – Container können sich per Service-Namen erreichen.
Host-Netzwerk
Container teilt den Netzwerk-Stack des Hosts:
docker run -d --network host nginx
# nginx lauscht direkt auf Port 80 des Hosts
# kein -p Port-Mapping nötig!
Vorteil: Maximale Performance, kein NAT-Overhead.
Nachteil: Container teilt alle Ports des Hosts – Konflikte möglich.
Port-Mapping
# Host-Port 8080 → Container-Port 80
docker run -d -p 8080:80 nginx
# Nur auf bestimmter IP binden
docker run -d -p 127.0.0.1:8080:80 nginx
# UDP-Port
docker run -d -p 5353:53/udp bind
# Alle exponierten Ports automatisch mappen
docker run -d -P nginx
Overlay-Netzwerk (Docker Swarm)
Für Multi-Host-Kommunikation in Docker Swarm:
# Swarm initialisieren
docker swarm init --advertise-addr <SERVER-IP>
# Overlay-Netzwerk erstellen
docker network create --driver overlay \
--attachable mein-overlay
# Service im Overlay-Netz
docker service create \
--name webapp \
--network mein-overlay \
--replicas 3 \
nginx:alpine
Macvlan – Container direkt im LAN
Container erhalten eine echte LAN-IP:
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
mein-macvlan
docker run -d --network mein-macvlan \
--ip 192.168.1.200 \
--name nas-client \
alpine
Ideal für Legacy-Apps die im gleichen LAN-Segment wie physische Server liegen müssen.
Docker Compose Networking
In docker-compose.yml werden Container automatisch im selben Netz gestartet:
services:
db:
image: postgres:16
networks:
- backend
api:
image: myapi:latest
networks:
- backend
- frontend
nginx:
image: nginx:alpine
networks:
- frontend
ports:
- "80:80"
networks:
backend:
driver: bridge
frontend:
driver: bridge
api kann mit db kommunizieren. nginx kann mit api kommunizieren. nginx und db sind isoliert.
Diagnose-Befehle
# Container-IP anzeigen
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container-name
# Netzwerk-Verbindungen testen (aus Container)
docker exec -it mein-container ping db
# Container-Ports anzeigen
docker port container-name
# Netzwerk-Traffic mit tcpdump im Container
docker run --rm --net container:nginx nicolaka/netshoot tcpdump -i eth0
FAQ
Warum sollte ich benutzerdefinierte Bridge-Netze nutzen?
Benutzerdefinierte Netze bieten automatisches DNS (Container per Name erreichbar), bessere Isolation und detailliertere Kontrolle über IP-Bereiche.
Kann ich einen Container nachträglich mit einem Netzwerk verbinden?
Ja: docker network connect mein-netz mein-container
Fazit
Das Netzwerkkonzept von Docker ist zunächst verwirrend, aber mit benutzerdefinierten Bridge-Netzen und Docker Compose ist die Container-Kommunikation gut strukturierbar.
Wir unterstützen KMU in Heidelberg und Mannheim beim Aufbau skalierbarer Container-Infrastrukturen. Jetzt anfragen.