Docker so konfigurieren, dass der Bereich 172.17.0.0 nicht verwendet wird

21

Aufgrund von Problemen mit Captive-Portalen und dem Standard-Docker-IP-Bereich versuche ich, Docker zu veranlassen, den 198.18.0.0-Bereich anstelle von 172.17.0.0 zu verwenden, der mit den Captive-Portalen in den Zügen, in denen ich wohne, kollidiert.

Im Anschluss an die Dokumente habe ich /etc/docker/daemon.jsonFolgendes erstellt und darin eingefügt:

{
    "bip":"198.18.0.0/16"
}

Dies funktionierte für docker0, scheint jedoch keines der anderen Netzwerke beeinflusst zu haben. Wenn Sie docker compose verwenden, wird als erstes das Netzwerk 172.17.0.0 erstellt, wodurch der Konflikt neu erstellt wird.

Was kann ich tun, um das Standard-Subnetz für alle Docker-Netzwerke zu ändern (vorzugsweise ohne meinen benutzerdefinierten IP-Bereich in jeder erstellten Datei angeben zu müssen)?

jrtapsell
quelle

Antworten:

27

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

$ docker -v
Docker version 18.06.0-ce, build 0ffa825

Bearbeiten oder erstellen Sie die Konfigurationsdatei für den Docker-Daemon:

# nano /etc/docker/daemon.json

Zeilen hinzufügen:

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

Dockerd neu starten:

# 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. Weitere Informationen hier https://github.com/moby/moby/pull/29376 (zusammengeführt)

rNix
quelle
10.10.0.0/16 überschneidet sich mit globalen Standardnetzwerken. Sie können {"base": "192.168.0.0/16","size":24} verwenden. Bitte sehen Sie github.com/moby/moby/blob/…
Root G
11

Docker generiert an drei Stellen Netzwerk-Subnetze.

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

Für die Standard-Bridge (als "Bridge" bezeichnet) können Sie BIP (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.jsonDatei angeben . 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 /etc/docker/daemon.jsonwürde Ihre aussehen:

{
  "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 Einstellung des Adresspools oben 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 werden. Sie benötigen mindestens 18.06 für die Standardadresspools. Sie müssen den Docker-Daemon neu laden, damit diese Änderung wirksam wird ( systemctl reload docker). Durch diese Änderung werden nur neu erstellte Benutzernetzwerke geändert. Daher müssen Sie Container anhalten und vorhandene Netzwerke im falschen Bereich löschen.


In der Version 18.09 hat Docker die Möglichkeit hinzugefügt, den Adressbereich für im Schwarmmodus generierte Overlay-Netzwerke festzulegen. Dies ist derzeit nur zum Zeitpunkt der Erstellung eines Schwarms möglich. Wir hoffen, dass dies in Zukunft aktualisiert wird, damit docker swarm updatedie folgenden Pools angepasst werden können:

$ 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
BMitch
quelle
1
Hervorragende Übersicht über die aktuellen Optionen für 2018/2019. Wenn Sie Docker Desktop verwenden, wählen Sie die bipOption in der GUI "Einstellungen". Denn default-address-poolsSie können die daemon.json manuell in derselben GUI bearbeiten, und für Schwärme default-addr-pooländern Sie sie immer noch mit dem initBefehl.
Bret Fisher
1

Konfigurieren Sie das Standardbrückennetzwerk : "… Um das Standardbrückennetzwerk zu konfigurieren, geben Sie Optionen in daemon.json an. Hier ein Beispiel für daemon.json mit mehreren angegebenen Optionen. Geben Sie nur die Einstellungen an, die Sie anpassen müssen.…"

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

Poige
quelle
Kann der IP-Bereich für implizite Netzwerke, die von Docker-Compose verwendet werden, und für Netzwerke, für die der Bereich nicht explizit festgelegt wurde, geändert werden?
Jrtapsell
-1

Es mag ein bisschen brutal sein, aber ich mache einfach ein sudo ifconfig docker0 down, um die Schnittstelle herunterzufahren, die mit dem WLAN in Konflikt steht, das ich zu benutzen versuche.

Falko Menge
quelle
Bei der Frage geht es um die Verwendung eines anderen Bereichs und nicht darum, das Netzwerk auszuschalten.
RalfFriedl
@RalfFriedl Das stimmt. Aber als Vielreisender, der viele verschiedene WLAN-Netze nutzt, habe ich alle möglichen Port-Bereiche in Konflikt gesehen. Anstatt nach einem Portbereich zu suchen, kann das Netzwerk auch vorübergehend ausgeschaltet werden.
Falko Menge