🌐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

Linux-Host · eth0 192.168.1.10 (Beispiel)🌍 Internet / LANiptablesNAT: DNAT/SNAT🔀 Brücke docker0 172.17.0.1veth📦 webeth0 172.17.0.2eigener Netz-Namespaceveth📦 dbeth0 172.17.0.3eigener Netz-Namespace-p 8080:80 → DNAT auf 172.17.0.2:80

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

Tippe eine Port-Angabe wie bei „docker run -p“ oder in „ports:“ einer Compose-Datei – Syntax: [IP:][HOST:]CONTAINER[/PROTOKOLL].
127.0.0.1:3061→ DNAT →172.17.0.2:3000/tcp

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

Wer kann wen beim Namen nennen? Wähle einen Container und einen Namen.
Container und ihre Netze
  • 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
docker execgetent hosts
(keine Ausgabe – Name nicht auflösbar)

„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.