network_mode: host in Docker Compose erklärt
network_mode: host gibt dem Container den Netzwerk-Stack des Hosts, ohne Port-Mapping. Wann das mDNS/UPnP-Discovery repariert – und wann bridge richtig bleibt.

network_mode: host in Docker Compose erklärt
Sie packen Home Assistant oder Pi-hole in eine docker-compose.yml, fahren den Stack hoch, und die Geräte-Erkennung funktioniert einfach nicht. Keine neuen Geräte, keine automatisch erkannten Integrationen, nichts. Der Container läuft einwandfrei — docker compose ps zeigt ihn als gesund an — er sieht nur den Rest Ihres LANs nicht. Der Fix, der in Forenbeiträgen immer wieder auftaucht, ist network_mode: host, und das klingt erstmal so, als würde es genau die Isolation zerstören, die Sie von Docker eigentlich wollten.
network_mode: hostentfernt den eigenen Netzwerk-Stack des Containers und gibt ihm direkt das Netzwerk-Interface des Host-Rechners — keine eigene IP, kein NAT, kein Port-Mapping.- Das ist vor allem wichtig für Dienste, die auf Multicast-basiertem Discovery beruhen (mDNS/Zeroconf, SSDP/UPnP) — diese Broadcasts überleben Dockers Standard-Bridge-Netzwerk in der Regel nicht, weil die Bridge den Container hinter der IP des Hosts versteckt.
- Historisch Linux-exklusiv; Docker Desktop 4.34+ hat Unterstützung nachgerüstet, muss aber manuell unter Settings → Resources → Network aktiviert werden, und gilt weiterhin nur für Linux-Container.
ports:ist unternetwork_mode: hostnicht nur überflüssig — die Kombination beider ist ein Compose-Konfigurationsfehler, weil der Host-Modus die Ports des Containers bereits direkt auf dem Host freigibt.- Die meisten Dienste (Web-Apps, APIs, Datenbanken) haben keine Discovery-Abhängigkeit — für die ist die Isolation der Bridge mit explizitem Port-Mapping der bessere Standard, keine Einschränkung, die man umgehen muss.
Warum das Standard-Bridge-Netzwerk Discovery blockiert
Compose setzt standardmäßig jeden Dienst auf ein Bridge-Netzwerk und versteckt ihn per NAT hinter der IP des Hosts — jeder Container bekommt seine eigene private Adresse, und Compose mappt nur die Ports, die Sie explizit deklarieren. Das ist normale, bewusste Isolation, und für die meisten Dienste völlig ausreichend.
Problematisch wird es bei allem, was auf Multicast angewiesen ist, um andere Geräte zu finden — mDNS/Zeroconf (die Namensauflösung und Auto-Discovery für .local-Hostnamen) und SSDP/UPnP (genutzt von DLNA-Medienservern, manchen Smart-Home-Geräten und Chromecast-ähnlichem Discovery) senden beide auf einer Multicast-Adresse, die eine NAT-Grenze in der Regel nicht überquert — anders als gewöhnlicher Unicast-Verkehr. Der Container kann weiterhin problemlos ausgehende Verbindungen aufbauen; er sieht nur nie den Multicast-Verkehr in Ihrem echten LAN — und wird selbst auch nicht gesehen.
Note
Genau das ist das Fehlerbild hinter den Home-Assistant- und Pi-hole-Discovery-Beschwerden, die Sie in nahezu jedem Self-Hosting-Forum finden — der Container ist gesund, die App läuft, und sie ist schlicht taub für eine Verkehrsart, die das Bridge-Netzwerk nie weiterleiten sollte.
Was network_mode: host tatsächlich tut
Laut Dockers eigener Dokumentation zum Host-Network-Driver ist bei einem Container mit dem host-Treiber "der Netzwerk-Stack dieses Containers nicht vom Docker-Host isoliert — der Container teilt sich den Netzwerk-Namespace des Hosts, und der Container bekommt keine eigene IP-Adresse zugewiesen." Es gibt keine Bridge, kein NAT, keine eigene Container-IP: Der Prozess im Container bindet sich direkt an das echte Netzwerk-Interface des Hosts, exakt so, als liefe er außerhalb von Docker.
Genau diese eine Änderung ist auch der Grund, warum Multicast-basiertes Discovery wieder funktioniert — der Container ist jetzt tatsächlich im Netzwerksegment Ihres LANs präsent, statt hinter einer übersetzten Adresse zu sitzen.
Dieselbe Docker-Dokumentation ist auch konkret dazu, wo dieser Treiber läuft: Unterstützt werden "Docker Engine unter Linux" und seit "Docker Desktop Version 4.34" auch Docker Desktop — allerdings erst, nachdem Sie es manuell aktivieren (Settings → Resources → Network → "Enable host networking"), und nur für Linux-Container; Windows-Container sind komplett ausgeschlossen. Es funktioniert außerdem nicht zusammen mit Docker Desktops Enhanced-Container-Isolation-Funktion, da die Isolation eines Containers vom Host und die Übergabe des eigenen Host-Netzwerks direkt gegensätzliche Ziele sind.
Bridge vs. Host vs. Macvlan: Die Entscheidung
| Netzwerkmodus | Isolation | Port-Mapping | Multicast-Discovery (mDNS/SSDP/UPnP) | Typischer Einsatzfall |
|---|---|---|---|---|
bridge (Standard) |
Vollständig — Container hat eigene IP, per NAT hinter dem Host | Explizit, via ports: |
Funktioniert in der Regel nicht | Web-Apps, APIs, Datenbanken — alles ohne LAN-Discovery-Abhängigkeit |
host |
Keine — Container teilt sich direkt den Netzwerk-Stack des Hosts | Entfällt — Ports binden direkt auf dem Host | Funktioniert — Container ist echter Teilnehmer im LAN | Home Assistant, Pi-hole, DLNA-/Medienserver, alles, was per Multicast sehen oder gesehen werden muss |
macvlan |
Container bekommt eigene MAC- und IP-Adresse im physischen LAN, getrennt vom Host | Entfällt — der Container hat eine echte LAN-Adresse | Funktioniert — Container hat echte LAN-Präsenz | Geräte, die wie ein eigenständiges physisches Gerät im Netzwerk aussehen müssen, ohne sich die IP des Hosts zu teilen |
macvlan bietet den Discovery-Vorteil von host, hält den Traffic des Containers aber auf einer eigenen Adresse statt auf der des Hosts — braucht dafür aber ein Netzwerk-Interface, das der Host in einen promiscuous-nahen Modus versetzen kann, und kann meist ohne zusätzliche Konfiguration nicht mit dem Host selbst sprechen — mehr Aufwand, als die meisten Homelab-Stacks brauchen. Für den häufigen Fall — ein oder zwei Dienste, die LAN-Discovery brauchen, auf Hardware, die Sie vollständig kontrollieren — ist host die einfachere Wahl.
Wann sich Host-Networking lohnt
Mein eigenes Homelab betreibt Home Assistant und Pi-hole per Compose auf einer Proxmox-VM. Der Geräte-Erkennungs-Flow von Home Assistant (neue Zigbee-/Zeroconf-Geräte, die automatisch auftauchen) hat auf dem Standard-Bridge-Netzwerk nie etwas gefunden — erst das Umstellen dieses einen Dienstes auf network_mode: host hat die automatische Erkennung überhaupt zum Laufen gebracht. Pi-hole hat einen zweiten, davon unabhängigen Grund: Auf Bridge-Networking zeigt das Query-Log von Pi-hole für jeden Client dieselbe NAT'ete Container-IP statt der echten LAN-Adresse jedes Geräts — das untergräbt den ganzen Sinn von Logging pro Client. Host-Networking behebt beides — Pi-hole sieht echte Client-IPs, und sein eigener DNS-Dienst ist direkt unter der IP des Hosts erreichbar, ohne Umweg über Port-Mapping.
Warning
Host-Networking entfernt die Netzwerk-Isolation auf Container-Ebene vollständig. Ein kompromittierter Prozess in einem Host-Modus-Container hat denselben Netzwerkzugriff wie ein Prozess, der direkt auf dem Host läuft — jeder Port, jedes Interface, keine Bridge-Grenze dazwischen. Reservieren Sie es für Dienste, die diesen Zugriff konkret brauchen, nicht als Standard-Troubleshooting-Schritt.
Wann Sie bei Bridge bleiben sollten
Der Großteil eines typischen Compose-Stacks hat überhaupt keine Discovery-Abhängigkeit — ein Reverse-Proxy, eine Datenbank, eine Backend-API, eine statische Website. Keiner davon braucht Multicast, keiner profitiert von Host-Networking, und alle sind auf der Standard-Bridge mit expliziten ports:-Mappings sicherer und portabler, wie in unserem Docker-Compose-Networking-Guide beschrieben. Isolation ist dort keine Einschränkung, die Sie umgehen — sie ist das Feature, das seinen Job macht.
Einrichtung
services:
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
network_mode: host
volumes:
- ./homeassistant-config:/config
restart: unless-stopped
Kein ports:-Block, und keiner wird gebraucht — die Dienste des Containers binden sich direkt an die echten Interfaces des Hosts. Laut der Docker-Compose-Spezifikation sind network_mode: host und ports: ausdrücklich inkompatibel: "Port mapping must not be used with network_mode: host. Doing so causes a runtime error, because network_mode: host already exposes container ports directly to the host network." Lassen Sie nach der Umstellung eines Dienstes auf Host-Modus einen alten ports:-Block stehen, verweigert Compose den Start — stillschweigend ignorieren tut es ihn nicht.
Tip
Sobald ein Dienst auf Host-Networking läuft, teilt er sich den tatsächlichen Port-Raum des Hosts — inklusive jedem anderen Host-Modus-Container und jedem Prozess, der direkt auf dem Host läuft. Zwei Host-Modus-Dienste (oder ein Host-Modus-Container und eine host-installierte App), die denselben Port belegen wollen, kollidieren sofort, ohne dass Compose das per Port-Remapping auffangen könnte. Prüfen Sie mit ss -tulpn auf dem Host, was einen Port bereits belegt, bevor Sie einen zweiten Host-Modus-Dienst hinzufügen, der ihn braucht.
FAQ
Funktioniert network_mode: host auf Docker Desktop für Mac oder Windows?
Seit Docker Desktop 4.34, ja — muss aber manuell unter Settings → Resources → Network → "Enable host networking" aktiviert werden, ist nicht standardmäßig an, und gilt nur für Linux-Container (Windows-Container sind ausgeschlossen). Frühere Docker-Desktop-Versionen und reine Docker Engine unter Linux verhalten sich anders: Docker Engine unter Linux hat das schon immer nativ unterstützt, ganz ohne Schalter.
Kann ich Host-Networking- und Bridge-Networking-Dienste in derselben docker-compose.yml mischen?
Ja. `network_mode` wird pro Dienst gesetzt, nicht global — der Großteil eines Stacks kann auf der Standard-Bridge bleiben, während ein oder zwei Dienste mit LAN-Discovery-Bedarf `network_mode: host` nutzen. Der Trade-off: Ein Host-Modus-Dienst ist von Bridge-Modus-Geschwisterdiensten nicht über den üblichen Compose-Service-Namen-DNS erreichbar, wie es zwei Bridge-Dienste untereinander sind — erreichbar ist er nur über die eigene IP des Hosts oder localhost.
Verbessert Host-Networking die Docker-Performance?
Es entfernt eine Schicht NAT-Übersetzung, was bei sehr durchsatzstarken oder latenzkritischen Workloads relevant sein kann — bei einem typischen Homelab-Dienst werden Sie den Unterschied aber kaum bemerken. Der eigentliche Grund, dazu zu greifen, ist Multicast-basiertes Discovery (mDNS/SSDP/UPnP) oder die Notwendigkeit, echte Client-IPs zu sehen — nicht reine Performance.
Ist network_mode: host ein Sicherheitsrisiko im Heimnetzwerk?
Es entfernt Dockers Netzwerk-Isolation für diesen Container, sodass ein kompromittierter Prozess denselben Netzwerkzugriff bekommt wie alles andere, das auf dem Host läuft. In einem Heimnetz hinter einem Router ist das ein kleinerer Blast-Radius als bei einem Server mit Internet-Exposition, aber es bleibt ein echter Trade-off — nutzen Sie es für die konkreten Dienste, die LAN-Discovery brauchen, nicht als pauschalen Standard.
Fazit
network_mode: host tauscht Dockers Netzwerk-Isolation gegen direkten Zugriff auf das echte Netzwerk-Interface des Hosts ein — der Fix für Multicast-abhängiges Discovery (mDNS/Zeroconf, SSDP/UPnP), das das Standard-Bridge-Netzwerk nicht weiterleiten kann, und für Dienste wie Pi-hole, die echte Client-IPs statt einer NAT'eten Container-Adresse sehen müssen. Greifen Sie dazu bei der Handvoll Dienste, die es konkret brauchen — Home Assistant, Pi-hole, DLNA-ähnliche Medienserver — und lassen Sie alles andere, also den Großteil eines typischen Stacks, auf der Standard-Bridge, wie in unserem Docker-Compose-Networking-Guide beschrieben. Wenn Sie den Rest des Stacks drumherum noch aufbauen, deckt unser Docker-Compose-Self-Hosting-Guide die Grundlagen ab, die dieser Artikel voraussetzt, und unser Guide zur Heimnetzwerk-Sicherheit die breiteren Trade-offs, Dienste direkt im LAN zu exponieren.
Mehr aus Self-Hosting & Privatsphäre

Eine genehmigte Subnetzroute, die trotzdem nichts tat: das echte Tailscale-Setup auf Ubuntu, Raspberry Pi und Proxmox — Auth-Flow, MagicDNS, ACL-Tags und die zwei Stolperfallen (fehlendes /dev/net/tun im LXC, die zweistufige Routen-Freigabe), die wirklich Zeit gekostet haben.

Tailscale ist kein WireGuard-Konkurrent, sondern WireGuard mit Koordinationsserver, NAT-Traversal, ACLs und Exit-Nodes. Ein Entscheidungsrahmen, wann reines WireGuard genügt und wann sich Tailscales Managed-Layer lohnt – mit belegten Preisen und Leistungsdaten.

Tailscale verbindet Geräte direkt per WireGuard-Mesh, ganz ohne offenen Router-Port. Diese Landkarte bündelt sechs Guides zu Funktionsweise, Alternativen-Vergleich, Installation, Exit-Nodes, Preisen und Headscale aus einem Homelab, das Tailscale tatsächlich betreibt.
Bleiben Sie auf dem Laufenden
Erhalten Sie die neuesten Artikel direkt in Ihr Postfach. Kein Spam, jederzeit abbestellbar.
Tailscale auf dem Homelab installieren
Eine genehmigte Subnetzroute, die trotzdem nichts tat: das echte Tailscale-Setup auf Ubuntu, Raspberry Pi und Proxmox — Auth-Flow, MagicDNS, ACL-Tags und die zwei Stolperfallen (fehlendes /dev/net/tun im LXC, die zweistufige Routen-Freigabe), die wirklich Zeit gekostet haben.
Weiterlesen