In der Standardeinstellung verwendet die Container-Engine “Docker” das private 172.17.0.0/16 Subnetz um Container mit IPv4-Adressen zu versorgen.
Dieser IP-Bereich, wird im UKLAN schon durch die Abteilung Netze des RRZK verwendet. In diesem werden zentrale universitätsweite Dienste bereitgestellt. Damit es zu keiner Beeinträchtigung durch Überschneidungen kommt, muss der IP-Bereich der Docker-Engine auf Systemen, welche innerhalb des UKLANs betrieben werden, geändert werden.
Beispiel für eine häufig aus diesem Grund auftretende Beeinträchtigung: Wenn Sie von einem Linux-Desktop-System auf welchem Docker installiert ist, innerhalb des UKLANs auf die VMware Admin-Oberfläche zugreifen wollen (https://vmfront6.uni-koeln.de), ist dies nicht möglich.
Notwendige Schritte für: Docker CE ab Version 18.06 | Docker 1.13 auf RHEL7
Standard IP-Bereich ändern (ab Version 18.06)
Wenn Sie die jeweils aktuellste Version der Software direkt aus den externen Repositories von download.docker.com beziehen, müssen Sie wie folgt vorgehen:
Konfigurationsdatei für den Docker-Daemon bearbeiten oder erstellen:
# nano /etc/docker/daemon.json
Einfügen:
{
"default-address-pools":
[
{"base":"192.168.0.0/16","size":24}
]
}
Diese Einstellung sorgt dafür, dass aus dem privaten Netzadressbereich (192.168.0.0/16), Subnetze mit jeweils 254 möglichen Containern gebildet werden. Neue Docker Networks bekommen jeweile den Bereich 192.168.1.0/24, 192.168.2.0/24 usw.
Anschließend muss die Container Engine neugestartet werden:
# service docker restart
Wenn Sie “Docker Compose” verwenden, sollten auch darüber automatisch erzeugte Docker Networks (Endung _default
) einmal gelöscht und neu erstellt werden:
$ docker-compose stop
Docker Network raussuchen und löschen. In diesem Beispiel, wäre es das Netzwerk webapp_default
:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
798f15d3dfc3 bridge bridge local
c3661b86d89c webapp_default bridge local
fcb518e69224 host host local
bd6153d36d17 none null local
$ docker network rm webapp_default
webapp_default
Anschließend können die Dienste mit docker-compose up -d
wieder neugestartet werden. Das löschen und neu anlegen, sollte auch bei sonstigen manuell erzeugten Docker Networks durchgeführt werden.
Zum überprüfen, können Sie sich die jeweiligen Subnetze ausgeben lassen:
$ docker network inspect bridge webapp_default | grep Subnet
"Subnet": "192.168.0.0/24"
"Subnet": "192.168.1.0/24",
Den Standard IP-Bereich ändern auf Docker und RHEL 7 (Version 1.13.x)
Wenn Sie Docker auf einem Red Hat Enterprise Linux 7 System, über das RHEL Extras Repository beziehen, erhalten Sie die Version 1.13.x. Bei dieser ist die Konfiguration anders als bei der aktuellsten Community Version von download.docker.com.
Konfigurationsdatei für den Docker-Daemon bearbeiten oder erstellen:
# nano /etc/docker/daemon.json
Inhalt:
{
"bip": "192.168.0.1/24",
"fixed-cidr": "192.168.0.0/24"
}
Anschließend muss die Container Engine neugestartet werden:
# service docker restart
Anders als bei der aktuellsten Version von Docker bekommen neue Docker Networks wieder eine IP aus dem Adressbereich 172.17.0.0/16. Damit dies nicht geschieht muss beim Erstellen von neuen Networks, stets darauf geachtet werden einen manuellen IP-Bereich festzulegen.
$ docker network create --driver=bridge --subnet=192.168.1.0/24 rrzk_anleitung
Ergebnis:
$ docker network inspect rrzk_anleitung | grep Subnet
"Subnet": "192.168.1.0/24"
In docker-compose.yml
Dateien hat sich diese Konfiguration bewährt:
networks:
default:
ipam:
driver: default
config:
- subnet: "192.168.1.0/24"
Den Adressbereich des Subnetzes ggf. anpassen z.B. auf “192.168.2.0/24”