Zum Inhalt springen

Docker all predefined address pools have been fully subnetted

Aus LHlab Wiki

Die Fehlermeldung Error response from daemon: all predefined address pools have been fully subnetted bedeutet, dass Docker alle verfügbaren Subnetze aus seinen Adress-Pools bereits vergeben hat. Standardmäßig nutzt Docker sehr große Netze (meist /16), auch wenn in einem Netzwerk nur wenige Container laufen.

Dadurch ist der Adressraum schnell erschöpft, insbesondere bei vielen Compose-Stacks mit jeweils eigenem Netzwerk.


Lösung: Docker Address Pool verkleinern und neu verteilen

Ziel:

  • Keine Kollision mit lokalen Netzwerk
  • Nutzung eines dedizierten Docker-Bereichs (172.16.0.0/12)
  • Automatische Vergabe von /24 pro Container-Netzwerk

Docker Address Pool anpassen (gilt nur für neue Netzwerke!)

# Docker stoppen
/etc/rc.d/rc.docker stop

# Docker Daemon Konfiguration bearbeiten
nano /etc/docker/daemon.json

# cfg ergänzen
{
  "default-address-pools": [
    {
      "base": "172.16.0.0/12",
      "size": 24
    }
  ]
}

# Docker starten
/etc/rc.d/rc.docker start

# neue config prüfen
docker info | grep -A5 "Default Address Pools"

Netzwerk-Reset & Neuverteilung

# Stoppt alle laufenden Container.
docker ps -q | xargs -r docker stop

# ⚠️ Achtung: Container müssen gestoppt sein!
# Löscht alle ungenutzten benutzerdefinierten Netzwerke (Standardnetzwerke bleiben erhalten).
docker network prune -f

# Erstellt die Netzwerke neu mit den neuen /24-Subnetzen.
docker compose up -d

Unraid: Docker-Konfiguration reboot-fest machen

Unraid überschreibt /etc/docker/daemon.json beim Neustart, daher folgendes:

# Erstellt ein persistentes Konfigurationsverzeichnis.
mkdir -p /boot/config/docker

# Erstellt die bootfeste Docker-Konfiguration.
nano /boot/config/docker/daemon.json

# cfg einfügen:
{
  "default-address-pools": [
    {
      "base": "172.16.0.0/12",
      "size": 24
    }
  ]
}

# reboot-copy konfigurieren in der Datei /boot/config/go
# vor Start des Management Utilitys (emhttp) einfügen
mkdir -p /etc/docker
cp /boot/config/docker/daemon.json /etc/docker/daemon.json