Docker · Networking · Traefik · Reverse Proxy
Docker Networking für Teams:
Reverse Proxy, Subdomains und lokale Zertifikate

Port-Konflikte zwischen Projekten, fehlendes HTTPS in der Entwicklung und unübersichtliche Hostnamen sind klassische Pain Points beim Docker-Networking im Team. Mit Traefik als zentralem Reverse Proxy, mkcert für lokale HTTPS-Zertifikate und sauber isolierten Docker-Netzwerken lassen sich diese Probleme ein für alle Mal lösen.

14 Min. Lesezeit Traefik · mkcert · Docker Networks · Service Discovery Docker Compose · Linux · macOS

1. Docker Networking: Grundlagen und Netzwerk-Typen

Docker Networking ist das System, das bestimmt, wie Container miteinander und mit der Außenwelt kommunizieren. Docker erstellt bei der Installation automatisch drei Standard-Netzwerke: bridge, host und none. Das Docker Networking über das Standard-Bridge-Netzwerk verbindet Container auf demselben Host miteinander, bietet aber keine Service-Discovery über Namen – Container müssen über IP-Adressen kommunizieren, die sich bei jedem Start ändern können. Das macht das Standard-Bridge-Netzwerk für alle ernsthaften Anwendungen ungeeignet.

Benutzerdefinierte Bridge-Netzwerke lösen das Problem: Container im selben benutzerdefinierten Netzwerk können sich gegenseitig über ihren Container-Namen oder Service-Namen in Docker Compose erreichen. Das ist die Basis für funktionierendes Docker Networking in Compose-Projekten. Der Host-Netzwerk-Modus verbindet den Container direkt mit dem Netzwerk des Hosts – kein Network Address Translation (NAT), keine Port-Weiterleitung, aber auch keine Isolation. Auf Linux ermöglicht das die beste Performance für Anwendungen, die viele Verbindungen verwalten, wie Reverse Proxies oder Datenbanken mit hohem Durchsatz.

Das Overlay-Netzwerk ist für Multi-Host-Umgebungen gedacht und kommt in Docker Swarm oder Kubernetes zum Einsatz. Es ermöglicht, dass Container auf verschiedenen Hosts miteinander kommunizieren, als wären sie im selben Netzwerk. Für lokale Entwicklung und einfache Produktionsumgebungen mit einem einzelnen Host ist das Bridge-Netzwerk die richtige Wahl. Das Verständnis dieser Grundlagen ist Voraussetzung für sauberes Docker Networking in der Praxis.

2. Netzwerk-Isolation zwischen Projekten

In Docker Compose erstellt jedes Projekt standardmäßig sein eigenes Netzwerk mit dem Namen <projectname>_default. Container verschiedener Projekte können sich damit nicht per Hostnamen erreichen – eine wichtige Sicherheitseigenschaft des Docker Networking. Probleme entstehen, wenn Dienste aus verschiedenen Projekten miteinander kommunizieren müssen, zum Beispiel wenn ein Monitoring-Stack Container aus mehreren Projekten beobachten soll. Die Lösung ist ein gemeinsames externes Netzwerk, das in beiden Compose-Dateien referenziert wird.

Die Netzwerk-Isolation im Docker Networking hat auch Auswirkungen auf die Sicherheit: Ein kompromittierter Container in einem Projekt kann per se nicht auf Dienste anderer Projekte zugreifen. Wer Datenbanken, Caches oder interne APIs vor versehentlichem Zugriff aus anderen Containern schützen möchte, sollte Dienste explizit nur in internen Netzwerken ohne Port-Expositionen betreiben. Die Kombination aus projektspezifischen Netzwerken für interne Kommunikation und einem gemeinsamen Reverse-Proxy-Netzwerk für externen Zugriff ist das bewährteste Muster für professionelles Docker Networking.


# Create a shared external network for the reverse proxy
docker network create proxy-network

# docker-compose.yml — project with internal and external network
services:
  web:
    image: nginx:alpine
    networks:
      - proxy-network   # shared with Traefik for external access
      - internal        # project-internal communication
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myapp.rule=Host(`myapp.localhost`)"

  db:
    image: postgres:16
    networks:
      - internal        # NOT exposed to proxy — internal only
    environment:
      POSTGRES_PASSWORD: secret

  redis:
    image: redis:7-alpine
    networks:
      - internal        # Only accessible within this project

networks:
  proxy-network:
    external: true      # Must be created before: docker network create proxy-network
  internal:
    driver: bridge
    internal: true      # No outbound internet access — isolated

3. Service Discovery in Docker Compose

Service Discovery ist eines der praktischsten Features des Docker Networking in Compose-Projekten. Container im selben Netzwerk können sich über den Service-Namen der Compose-Datei erreichen, nicht über IP-Adressen. Das bedeutet: Ein PHP-Container verbindet sich mit db:3306 statt mit einer IP-Adresse, ein Nginx-Container leitet Anfragen an php-fpm:9000 weiter. Diese Names werden intern über einen eingebetteten DNS-Server aufgelöst, den Docker für jedes benutzerdefinierte Netzwerk bereitstellt.

Ein wichtiges Detail bei Docker Networking und Service Discovery: Wenn ein Service in einer Compose-Datei mit einem Alias versehen wird, ist er unter diesem Alias erreichbar. Das ist nützlich, wenn mehrere Projekte denselben Service-Namen verwenden, aber unter unterschiedlichen Hostnamen erreichbar sein sollen – zum Beispiel zwei Magento-Instanzen, die beide db als Service-Namen nutzen, aber in verschiedenen Projektnetzwerken laufen. Netzwerk-Aliases lösen dieses Problem elegant, ohne Container umbenennen zu müssen.

4. Port-Konflikte vermeiden

Port-Konflikte sind eines der häufigsten Probleme beim Docker Networking in Teams, die an mehreren Projekten gleichzeitig arbeiten. Wenn drei Projekte jeweils Port 80 und 443 binden wollen, schlägt der Start jedes zweiten Projekts fehl. Die naheliegende Lösung – jedes Projekt bekommt andere Ports – führt zu URLs wie localhost:8081, localhost:8082, die schwer zu merken sind und HTTPS nicht realistisch simulieren. Die eigentliche Lösung ist ein zentraler Reverse Proxy, der Port 80 und 443 hält und Anfragen basierend auf dem Hostnamen an das richtige Projekt weiterleitet.

Ohne Reverse Proxy ist die Empfehlung für Docker Networking: Service-Ports nur im internen Netzwerk exponieren, nicht auf den Host binden. In der Compose-Datei bedeutet das: Statt ports: "80:80" nur expose: "80" verwenden. Container im selben Netzwerk können den Port trotzdem erreichen, aber der Host-Port ist nicht belegt. Das verhindert Konflikte zwischen Projekten und erzwingt den Weg über den Reverse Proxy für externen Zugriff.

5. Traefik als zentraler Reverse Proxy

Traefik ist für Docker Networking im Team-Kontext die überzeugendste Lösung als Reverse Proxy. Der entscheidende Unterschied zu Nginx: Traefik erkennt neue Container automatisch über die Docker-API und konfiguriert sich selbst anhand von Container-Labels. Es ist kein Neustart, kein Reload und keine manuelle Konfigurationsänderung notwendig, wenn ein neues Projekt gestartet wird. Der Traefik-Prozess läuft permanent und wartet auf neue Container mit entsprechenden Labels im gemeinsamen Proxy-Netzwerk.

Die Konfiguration von Traefik für lokales Docker Networking ist überschaubar: Ein Compose-Stack für Traefik selbst, der am gemeinsamen Proxy-Netzwerk teilnimmt, den Docker-Socket einbindet und die Dashboard-UI auf einem internen Port exponiert. Jedes Projekt-Service erhält dann Labels, die Traefik mitteilen, unter welchem Hostnamen der Service erreichbar sein soll, ob HTTPS aktiv ist und welche Middleware angewendet werden soll. Middleware für Basis-Authentifizierung, Redirect von HTTP zu HTTPS und Rate-Limiting sind als fertige Traefik-Komponenten verfügbar.


# traefik/docker-compose.yml — central Traefik reverse proxy
services:
  traefik:
    image: traefik:v3.2
    command:
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.network=proxy-network"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      # Load TLS certificates from /certs directory
      - "--providers.file.directory=/certs"
      - "--providers.file.watch=true"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"   # Traefik dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./certs:/certs:ro
    networks:
      - proxy-network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.rule=Host(`traefik.localhost`)"
      - "traefik.http.routers.dashboard.service=api@internal"

networks:
  proxy-network:
    external: true

6. Lokale Subdomains mit /etc/hosts und dnsmasq

Lokale Subdomains sind der Schritt, der das Docker Networking für Teams wirklich angenehm macht: Statt localhost:8080 sind Projekte über myapp.localhost, shop.localhost oder api.localhost erreichbar. Für einfache Fälle reicht ein Eintrag in /etc/hosts: 127.0.0.1 myapp.localhost. Der Nachteil ist, dass jeder Entwickler diese Datei manuell pflegen muss und Wildcards wie *.localhost nicht unterstützt werden.

Die elegantere Lösung für Docker Networking mit Subdomains ist dnsmasq: Ein lokaler DNS-Server, der alle Anfragen an *.localhost auf 127.0.0.1 auflöst. Auf macOS kann dnsmasq über Homebrew installiert werden, auf Linux ist es in den meisten Distributionen verfügbar. Nach der Konfiguration funktionieren alle Subdomains automatisch, ohne /etc/hosts zu bearbeiten. Moderne Browser lösen *.localhost ohne dnsmasq zu 127.0.0.1 auf, aber andere Tools wie curl und viele Entwicklungs-Utilities tun das nicht – dnsmasq schließt diese Lücke.

7. Lokale HTTPS-Zertifikate mit mkcert

HTTPS in der lokalen Entwicklungsumgebung ist keine Luxus, sondern eine Notwendigkeit: Cookies mit Secure-Flag, Service Worker, WebAuthn und HTTP/2 funktionieren nur über HTTPS. Das Docker Networking im Team muss deshalb HTTPS unterstützen, und zwar mit Zertifikaten, die der Browser als vertrauenswürdig einstuft. Selbstsignierte Zertifikate erzeugen Browserwarnungen, die im Alltag ignoriert werden – bis jemand vergisst, eine Ausnahme hinzuzufügen, und sich wundert, warum die Anwendung nicht lädt.

mkcert ist das Werkzeug der Wahl für lokales HTTPS in Docker Networking-Setups. Es erstellt eine lokale Certificate Authority (CA) und installiert diese in den System-Truststore sowie in den Truststore von Chrome, Firefox und anderen Browsern. Zertifikate, die mit dieser CA ausgestellt werden, werden vom Browser ohne Warnung als vertrauenswürdig akzeptiert. Ein einziger Befehl erstellt ein Zertifikat für beliebig viele Domains und Wildcards: mkcert "*.localhost" "localhost" "127.0.0.1". Das erzeugte Zertifikat wird in Traefik eingebunden und gilt dann für alle Subdomains.


# Install mkcert (once per developer machine)
# macOS: brew install mkcert
# Linux: see https://github.com/FiloSottile/mkcert

# Install the local CA into browser/system truststores
mkcert -install

# Generate wildcard certificate for all *.localhost subdomains
mkcert -key-file ./traefik/certs/local-key.pem \
       -cert-file ./traefik/certs/local-cert.pem \
       "*.localhost" "localhost" "127.0.0.1"

# Traefik TLS configuration file (./traefik/certs/tls.yml)
# tls:
#   certificates:
#     - certFile: /certs/local-cert.pem
#       keyFile: /certs/local-key.pem

# Project service labels for HTTPS routing
# Add to any service in any docker-compose.yml:
# labels:
#   - "traefik.enable=true"
#   - "traefik.http.routers.myapp-secure.rule=Host(`myapp.localhost`)"
#   - "traefik.http.routers.myapp-secure.entrypoints=websecure"
#   - "traefik.http.routers.myapp-secure.tls=true"

8. Mehrere Projekte gleichzeitig mit Traefik

Das finale Ziel des professionellen Docker Networking für Teams ist das gleichzeitige Betreiben mehrerer Projekte auf demselben Entwickler-Rechner ohne Konflikte. Mit Traefik als Reverse Proxy, mkcert für HTTPS und dnsmasq für Subdomains ist das Setup: Traefik läuft permanent und verwaltet Port 80 und 443. Jedes Projekt hat seine eigene Compose-Datei, eigene Netzwerke für interne Kommunikation und nimmt am gemeinsamen Proxy-Netzwerk teil. Neue Projekte werden einfach gestartet – Traefik erkennt sie automatisch und leitet Anfragen anhand des Hostnamens weiter.

Ein wichtiger Aspekt für Teams beim Docker Networking: Die Traefik-Konfiguration und das gemeinsame Proxy-Netzwerk sollten in einem separaten Repository oder als Teil eines Team-Onboarding-Skripts gepflegt werden. Neu hinzukommende Entwickler führen ein einziges Setup-Skript aus, das Traefik startet, das Proxy-Netzwerk erstellt, mkcert installiert und die CA in den Truststore einfügt. Danach können sie jedes Projekt-Repository klonen und starten, ohne weitere Netzwerk-Konfigurationen zu kennen.

Ansatz Port-Konflikte HTTPS lokal Mehrere Projekte
Port-Mapping direkt Häufig Nicht möglich Manuell, aufwändig
Nginx als Proxy Gering Manuell Neustart bei Änderung
Traefik + mkcert Keine Automatisch Automatisch via Labels
Nur /etc/hosts Gering Browserwarnungen Manuelle Einträge

9. Networking-Ansätze im Vergleich

Die Wahl der richtigen Docker Networking-Strategie hängt von der Teamgröße, der Anzahl gleichzeitig aktiver Projekte und den Anforderungen an Produktionstreue der Entwicklungsumgebung ab. Ein Einzelentwickler mit einem Projekt kann mit direktem Port-Mapping auskommen. Ein Team mit fünf Entwicklern, das sechs Projekte aktiv entwickelt, braucht die vollständige Traefik-mkcert-dnsmasq-Infrastruktur.

Das kritische Kriterium beim Docker Networking ist die Produktionstreue: Je mehr die lokale Entwicklungsumgebung der Produktionsumgebung ähnelt, desto seltener treten Fehler auf, die lokal nicht reproduzierbar sind. HTTPS lokal zu erzwingen, denselben Reverse Proxy wie in der Produktion zu verwenden und dieselbe Netzwerk-Topologie nachzubilden sind Investitionen, die sich durch weniger Produktionsvorfälle bezahlt machen. Die Traefik-basierte Lösung für Docker Networking ist in dieser Hinsicht der direkten Port-Mapping-Variante klar überlegen.

Mironsoft

Docker-Infrastruktur, Networking und Entwicklungsumgebungen für Teams

Docker Networking für euer Team professionell aufsetzen?

Wir bauen eine vollständige Docker-Networking-Infrastruktur mit Traefik, lokalen HTTPS-Zertifikaten und automatischer Service Discovery – damit euer Team ohne Port-Konflikte und ohne Browser-Warnungen entwickeln kann.

Traefik-Setup

Zentraler Reverse Proxy für alle Projekte mit automatischer Label-basierter Konfiguration

HTTPS lokal

mkcert-Integration für vertrauenswürdige lokale Zertifikate ohne Browser-Warnungen

Onboarding-Skript

Ein-Klick-Setup für neue Entwickler: Netzwerke, Zertifikate und Proxy in einem Schritt

10. Zusammenfassung

Professionelles Docker Networking für Teams löst die klassischen Probleme – Port-Konflikte, fehlende HTTPS-Unterstützung und schwer merkbare URLs – durch eine klare Infrastruktur: Traefik als permanenter zentraler Reverse Proxy mit automatischer Label-basierter Konfiguration, mkcert für vertrauenswürdige HTTPS-Zertifikate ohne Browser-Warnungen, dnsmasq für automatische Subdomain-Auflösung und sauber isolierte Projekt-Netzwerke für Sicherheit und Klarheit. Diese vier Komponenten zusammen ermöglichen, dass beliebig viele Projekte gleichzeitig laufen können.

Die wichtigste Erkenntnis beim Docker Networking ist, dass der Einrichtungsaufwand einmalig ist und sich über alle zukünftigen Projekte amortisiert. Nach dem initialen Setup startet jedes neue Projekt einfach mit docker compose up – Traefik erkennt den neuen Service automatisch, das Zertifikat gilt für alle *.localhost-Domains, und der Subdomain-Name ist über Labels frei wählbar. Das spart für jedes neue Projekt Zeit und verhindert Konfigurationsfehler durch Kopieren von Port-Nummern aus verschiedenen Compose-Dateien.

Docker Networking für Teams — Das Wichtigste auf einen Blick

Netzwerk-Isolation

Jedes Projekt bekommt eigene Netzwerke. Datenbanken nur im internen Netzwerk. Gemeinsames Proxy-Netzwerk nur für den Reverse Proxy.

Traefik als Proxy

Automatische Konfiguration via Container-Labels. Kein Neustart bei neuen Projekten. Port 80 und 443 zentral verwaltet.

HTTPS lokal

mkcert erstellt lokale CA + Zertifikate. Browser akzeptiert ohne Warnung. Ein Zertifikat für alle *.localhost-Domains.

Onboarding

Setup-Skript für neue Entwickler: docker network create, mkcert -install, Traefik starten. Danach funktioniert jedes Projekt automatisch.

11. FAQ: Docker Networking für Teams

1Bridge vs. Overlay im Docker Networking?
Bridge: Container auf demselben Host. Overlay: Container auf verschiedenen Hosts (Swarm/Kubernetes). Für lokale Entwicklung reicht Bridge.
2Warum internal: true für Datenbanken?
Kein ausgehender Internetzugang, nur projektinterne Erreichbarkeit. Verhindert versehentlichen Zugriff von außen und ausgehende Verbindungen aus dem DB-Container.
3Wie sehe ich welche Container in welchem Netzwerk sind?
docker network inspect proxy-network oder docker inspect my-container. Unter NetworkSettings.Networks sind alle Netzwerke aufgelistet.
4Warum kein Service Discovery im Standard-Bridge?
Kein eingebetteter DNS. Container nur über IP erreichbar. Benutzerdefinierte Bridge-Netzwerke haben DNS-Server und erlauben Kommunikation über Service-Namen.
5Muss mkcert auf jedem Rechner installiert werden?
Ja, mkcert -install muss einmalig pro Rechner ausgeführt werden, um die CA im Truststore zu registrieren. Zertifikatsdateien können geteilt werden.
6Wie erkennt Traefik neue Container automatisch?
Traefik lauscht auf dem Docker-Socket. Neue Container mit traefik.enable=true werden erkannt und Labels werden als Routing-Regeln konfiguriert — kein Neustart nötig.
7Traefik auch in der Produktion nutzbar?
Ja. Let's Encrypt, Load Balancing, Circuit Breaking, Rate Limiting und Prometheus-Metrics sind alle unterstützt. Lokale Konfiguration ist vereinfachte Produktions-Version.
8Was passiert beim docker compose down mit Netzwerken?
Projektspezifische Netzwerke werden entfernt. Externe Netzwerke (external: true) bleiben erhalten. Das Proxy-Netzwerk muss manuell mit docker network rm entfernt werden.
9Wie debugge ich Networking-Probleme?
docker exec -it container ping other-container. nicolaka/netshoot als Debug-Container mit nslookup, traceroute und tcpdump.
10Unterstützt dnsmasq Wildcard-Domains?
Ja. address=/.localhost/127.0.0.1 leitet alle Subdomains auf 127.0.0.1. Funktioniert auch für api.v2.localhost.