Docker all predefined address pools have been fully subnetted
Erscheinungsbild
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