Konfigurieren von Docker, um den Bereich 172.17.0.0 nicht zu verwenden

Aufgrund von Problemen mit Captive-Portalen und dem Standard-Docker-IP-Bereich versuche ich, Docker dazu zu bringen, den Bereich 198.18.0.0 anstelle von 172.17.0.0 zu verwenden, was mit den Captive-Portalen kollidiert, die in den Zügen verwendet werden, in denen ich wohne.

Folgenden Dok, Ich habe erstellt /etc/docker/daemon.json, und fügen Sie Folgendes ein:

{    "bip":"198.18.0.0/16"}

Dies funktionierte für docker0, aber es scheint keines der anderen Netzwerke betroffen zu haben, und mit docker compose ist das erste erstellte Netzwerk 172.17.0.0, wodurch der Konflikt neu erstellt wird.

Was kann ich tun, um das Standard-Subnetz für zu ändern aller docker-Netzwerke (vorzugsweise ohne Angabe meines benutzerdefinierten IP-Bereichs in jeder Erstellungsdatei)?

Es ist möglich, den Standardbereich neu zu definieren.

$ docker -vDocker version 18.06.0-ce, build 0ffa825

Konfigurationsdatei für Docker-Daemon bearbeiten oder erstellen:

# nano /etc/docker/daemon.json

Zeilen hinzufügen:

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

Starten Sie dockerd neu:

# service docker restart

Überprüfen Sie das Ergebnis:

$ docker network create foo$ docker network inspect foo | grep Subnet                    "Subnet": "10.10.1.0/24"

Es funktioniert auch für Docker-Compose. Mehr Infos hier https://github.com/moby/moby/pull/29376 (zusammenführen)

Es gibt drei Stellen, an denen Docker Netzwerk-Subnetze generiert.

  • Die Standardbrücke
  • Benutzergenerierte Brückennetzwerke
  • Schwarmmodus generierte Overlay-Netzwerke

Für die Standardbrücke ("Bridge" genannt) können Sie BIP angeben (ich glaube, das ist Bridge-IP; stellen Sie sicher, dass es sich um eine Host-IP und nicht um eine Netzwerk-IP handelt) in der daemon.json Datei. Und für benutzergenerierte Bridge-Netzwerke können Sie einen Subnetzpool definieren, aus dem Sie auswählen können (vorausgesetzt, der Benutzer gibt kein Subnetz manuell an). Für diese beiden, Ihre /etc/docker/daemon.json würde aussehen wie:

{  "bip": "10.200.0.1/24",  "default-address-pools":[    {"base":"10.201.0.0/16","size":24},    {"base":"10.202.0.0/16","size":24}  ]}

Jede obige Adresspooleinstellung definiert einen CIDR-Bereich und die Größe der Subnetze, die aus diesem Bereich zugewiesen werden sollen. Das Obige definiert also zwei Klasse-B-Bereiche, die als Klasse-C-Netzwerke (/ 24) zugewiesen sind. Sie benötigen mindestens 18.06 für die Standardadressenpools. Sie müssen den Docker-Daemon neu laden, damit diese Änderung angewendet werden kann (systemctl reload docker). Und diese Änderung ändert nur neu erstellte Benutzernetzwerke, sodass Sie Container stoppen und vorhandene Netzwerke im falschen Bereich löschen müssen.


In 18.09 hat Docker die Möglichkeit hinzugefügt, den Adressbereich für im Schwarmmodus generierte Overlay-Netzwerke anzugeben. Dies kann derzeit nur zum Zeitpunkt der Schwarmerstellung erfolgen, hoffentlich wird dies in Zukunft aktualisiert, um dies zu ermöglichen docker swarm update so passen Sie diese Pools an:

$ docker swarm init \  --default-addr-pool 10.202.0.0/16 \  --default-addr-pool 10.203.0.0/16 \  --default-addr-pool-mask-length 24

Ich benutze Docker Desktop in einem Windows betriebssystem und ich habe versucht, die Standard-Bridge-IP zu ändern.

Docker gibt einen Fehler aus und fordert mich auf, die Einstellungen jedes Mal zurückzusetzen, wenn ich versuche, sie zu ändern nur das bip in den Einstellungen.

Das hat funktioniert: (muss tief eintauchen und verstehen, wie es funktioniert)

{  "bip": "192.168.1.5/24",   "fixed-cidr": "192.168.1.5/25",   "default-address-pools":[      { "base":"192.168.2.5/24", "size":28 }  ]}

Konfigurieren Sie die standard-Bridge-Netzwerk:"... Um das Standard-Bridge-Netzwerk zu konfigurieren, geben Sie Optionen in Daemon an.json. Hier ist ein Beispiel-Daemon.json mit mehreren angegebenen Optionen. Geben Sie nur die Einstellungen an, die Sie anpassen müssen. …"

Mit compose: Benutzerdefinierte Netzwerke angeben: "... Anstatt nur das Standard-App-Netzwerk zu verwenden, können Sie mit dem Netzwerkschlüssel der obersten Ebene Ihre eigenen Netzwerke angeben. Auf diese Weise können Sie komplexere Topologien erstellen und benutzerdefinierte Netzwerktreiber und -optionen angeben. Sie können damit auch Dienste mit extern erstellten Netzwerken verbinden, die nicht von Compose verwaltet werden. …"

Es mag ein bisschen brutal sein, aber ich mache einfach einen sudo ifconfig docker0 down um die Schnittstelle herunterzufahren, die mit dem WLAN in Konflikt steht, das ich verwenden möchte.