Warum nftables und Docker nicht zusammenpassen – und wie iptables‑legacy dein System rettet

Warum nftables und Docker nicht zusammenpassen – und wie iptables‑legacy dein System rettet

Docker ist für viele Admins das Rückgrat ihrer Self‑Hosting‑Infrastruktur. Container starten, Ports mappen, Reverse‑Proxy davor – fertig. Zumindest in der Theorie. In der Praxis stolpern viele Nutzer über ein Problem, das selten offen dokumentiert wird: Docker und nftables sind bis heute keine guten Freunde.

Dieser Artikel erklärt, warum das so ist, welche Symptome auftreten, wie man sie erkennt – und warum die Umstellung auf iptables‑legacy oft die einzig stabile Lösung ist.


🔥 Das Grundproblem: Docker spricht iptables, nicht nftables

Docker wurde in einer Zeit entwickelt, in der iptables der Standard war.
Als Linux später nftables eingeführt hat, wurde eine Kompatibilitätsschicht geschaffen: iptables‑nft.
Diese soll iptables‑Regeln in nftables übersetzen.

In der Theorie klingt das gut.
In der Praxis führt es zu:

  • unvollständigen NAT‑Regeln
  • fehlenden DNAT‑Einträgen
  • kaputten DOCKER‑Chains
  • Race‑Conditions beim Start
  • nicht erreichbaren Containern
  • mysteriösen Netzwerkfehlern
  • Debugging‑Höllen

Docker glaubt weiterhin, iptables zu benutzen – aber die Regeln landen in nftables, wo sie nicht immer korrekt umgesetzt werden.


🧩 Was Docker eigentlich tut

Docker erzeugt beim Start:

  • eigene Chains (DOCKER, DOCKER-USER, DOCKER-ISOLATION-STAGE-1, …)
  • NAT‑Regeln für Port‑Weiterleitungen
  • MASQUERADE‑Regeln für Container‑Netzwerke
  • Routing‑Einträge für Bridges

Diese Regeln sind iptables‑Regeln.
Wenn nftables aktiv ist, werden sie durch die Kompatibilitätsschicht übersetzt – und genau dort passieren Fehler.


🚨 Typische Symptome, wenn nftables aktiv ist

Viele Nutzer erkennen das Problem erst spät, weil die Symptome diffus sind:

1. Port‑Mappings funktionieren nicht

docker ps zeigt:

0.0.0.0:8081->80/tcp

Aber:

curl http://127.0.0.1:8081

→ Timeout.

2. Die DOCKER‑Chain ist leer

In nftables:

chain DOCKER {
}

Keine DNAT‑Regeln, keine Weiterleitungen.

3. Docker‑Netzwerke brechen nach Neustarts

Fehler wie:

network not found

oder

failed to create endpoint

4. Reverse‑Proxies funktionieren nicht mehr

Caddy, Traefik oder Nginx melden:

  • 502 Bad Gateway
  • Connection refused
  • Gateway timeout

5. nftables‑Regeln überschreiben Docker‑Regeln

Besonders fatal, wenn man eigene nftables‑Regeln nutzt.


🧨 Warum das passiert: Die Kompatibilitätsschicht ist nicht vollständig

iptables‑nft ist ein Übersetzer – aber kein perfekter.

Probleme entstehen besonders bei:

  • NAT‑Regeln
  • dynamischen Chains
  • Race‑Conditions beim Booten
  • parallelen Firewall‑Diensten
  • komplexen Docker‑Netzwerken
  • Port‑Mappings mit mehreren Bridges

Docker erwartet, dass iptables sofort und deterministisch reagiert.
nftables tut das nicht immer.


🛠️ Die Lösung: iptables‑legacy aktivieren

Die stabilste Lösung ist überraschend einfach:

Docker wieder mit iptables‑legacy betreiben.

Das bedeutet:

  • nftables deaktivieren
  • iptables‑legacy aktivieren
  • Docker neu initialisieren

Danach:

  • DOCKER‑Chains funktionieren wieder
  • Port‑Mappings funktionieren zuverlässig
  • NAT‑Regeln erscheinen sofort
  • keine Race‑Conditions mehr
  • Reverse‑Proxies laufen stabil
  • Container‑Netzwerke sind reproduzierbar

Für Self‑Hosting‑Setups ist das oft die einzig sinnvolle Wahl.


🧠 Wann nftables trotzdem sinnvoll ist

nftables ist moderner, schneller und eleganter.
Es ist großartig für:

  • Firewalls ohne Docker
  • Router
  • Gateways
  • komplexe Regelwerke
  • statische Server

Aber:

Wenn Docker im Spiel ist, gewinnt iptables‑legacy fast immer.

🧩 Empfehlung für Self‑Hoster

Für Setups wie:

  • WordPress
  • Nextcloud
  • Caddy
  • Traefik
  • MariaDB
  • WireGuard
  • Heimserver
  • VPS‑Tunnel
  • Cloudflare‑Proxy

ist die stabilste Kombination:

  • iptables‑legacy
  • Docker
  • Reverse‑Proxy
  • keine nftables‑Firewall parallel

Damit vermeidet man 95 % aller Docker‑Netzwerkprobleme.


🧵 Fazit

nftables ist die Zukunft der Linux‑Firewall – aber Docker lebt noch in der Vergangenheit.
Solange Docker intern iptables‑Regeln erzeugt, bleibt die Kombination mit nftables fehleranfällig.

Wer Docker stabil betreiben will, sollte:

  • nftables deaktivieren
  • iptables‑legacy aktivieren
  • Docker neu initialisieren

Danach laufen Port‑Mappings, Reverse‑Proxies und Container‑Netzwerke wieder zuverlässig.