Skip to content

Subnet-Konflikte vermeiden

Problem

Docker erstellt standardmäßig Netzwerke mit Subnetzen (z. B. 172.17.0.0/16, 172.18.0.0/16), die sich mit VPN-, LAN- oder Cloud-Netzen überschneiden können.\ Das führt zu Routing-Problemen (z. B. Services nicht erreichbar).


Ziel

  • Einheitlichen, konfliktfreien IP-Bereich für Docker definieren
  • Bestehende Netzwerke bereinigen
  • Compose-Stacks sauber neu aufbauen

Lösung (Schritt-für-Schritt)

1. Alle Compose-Stacks stoppen

In jedem Projektverzeichnis:

docker compose down

Entfernt Container und zugehörige Netzwerke (aber keine Volumes).


2. Alte, ungenutzte Netzwerke entfernen

docker network prune

Optional prüfen:

docker network ls

3. Docker Address Pool konfigurieren

Datei bearbeiten:

sudo nano /etc/docker/daemon.json

Beispiel:

{
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    }
  ]
}

Erklärung: - base: Gesamtbereich für Docker-Netzwerke - size: Größe der einzelnen Netzwerke (/24 = 256 IPs)


4. Docker neu starten

sudo systemctl restart docker

5. Compose-Stacks neu starten

docker compose up -d

Neue Netzwerke werden automatisch aus dem neuen IP-Bereich erstellt.


Verhalten bestehender Netzwerke

  • Subnetze bestehender Netzwerke werden nicht automatisch geändert
  • Netzwerke müssen gelöscht und neu erstellt werden
  • docker compose down übernimmt das für Standard-Compose-Netzwerke

Sonderfall: Externe Netzwerke

Wenn in der docker-compose.yml definiert:

networks:
  default:
    external: true

Dann gilt: - Netzwerk wird nicht automatisch entfernt - Muss manuell gelöscht oder angepasst werden:

docker network rm <network-name>

Sonderfall: Default Bridge (docker0)

Optional anpassbar über:

{
  "bip": "172.31.0.1/16"
}

Hinweis: - Betrifft nur das Standard-Bridge-Netzwerk - Nicht relevant für Compose-Netzwerke


Wichtige Hinweise

  • Keine Datenverluste, solange keine Volumes gelöscht werden
  • Nicht verwenden:
docker compose down -v
  • Netzwerke vor und nach der Umstellung prüfen:
docker network inspect <network-name>

Troubleshooting

Problem: Service weiterhin nicht erreichbar

  • Prüfen, ob alte Netzwerke noch existieren
  • Container neu erstellen:
docker compose up -d --force-recreate

Problem: Netzwerk lässt sich nicht löschen

  • Prüfen, ob noch Container verbunden sind:
docker network inspect <network>

Fazit

Die sichere Vorgehensweise ist: 1. Stacks stoppen\ 2. Netzwerke entfernen\ 3. Address-Pool definieren\ 4. Docker neu starten\ 5. Stacks neu starten

→ Danach nutzt Docker ausschließlich den konfigurierten IP-Bereich.