🌐Netzwerk: Brücken, NAT und DNS
Container bekommen eigene Netz-Namespaces. Wie sie untereinander und mit der Außenwelt reden, bestimmt der Netzwerk-Treiber – und ein paar iptables-Regeln, die Docker automatisch pflegt.
🔀Netzwerk-Modi
Standardnetz „bridge“
docker run -d -p 8080:80 nginx
- ▸Linux-Brücke docker0 mit 172.17.0.1/16 als Gateway
- ▸Jeder Container: eigener Netz-Namespace + veth-Paar zur Brücke
- ▸Nach außen: Masquerading (SNAT) über die Host-Adresse
- ▸Von außen nur über veröffentlichte Ports (-p) – DNAT
- ▸Keine Namensauflösung zwischen Containern
🚪Port-Mapping
TCP-Verbindungen an Port 3061 auf 127.0.0.1 werden an Port 3000 im Container weitergeleitet.
iptables -t nat -A DOCKER -d 127.0.0.1/32 ! -i docker0 -p tcp -m tcp --dport 3061 -j DNAT --to-destination 172.17.0.2:3000 iptables -t filter -A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 3000 -j ACCEPT
✅ Nur über die Loopback-Adresse erreichbar – typisch für Dienste hinter nginx auf demselben Host. Verbindungen von localhost bedient dabei meist der Prozess docker-proxy, denn Loopback-Pakete laufen standardmäßig nicht durch das NAT.
📇Eingebautes DNS
- proxyfrontend · 172.20.0.2
- appalias apifrontend · 172.20.0.3backend · 172.21.0.2
- dbalias mariadbbackend · 172.21.0.3
- alt1bridge · 172.17.0.2
- alt2bridge · 172.17.0.3
„db“ existiert, teilt aber kein Netz mit „proxy“ – Netze trennen auch die Namensauflösung.
Im Container zeigt cat /etc/resolv.conf in eigenen Netzen nameserver 127.0.0.11. Unbekannte Namen reicht dieser Server an die DNS-Server des Hosts weiter.