Heim >Betrieb und Instandhaltung >Docker >Ändern Sie das Docker-Standard-Gateway
Hintergrund des Artikels:
Wenn wir Docker in einem lokalen Netzwerk verwenden, ist eine der häufigsten Verwirrungen, auf die wir stoßen, dass das Netzwerk manchmal über Netzwerksegmente hinweg blockiert ist. Der Grund dafür ist, dass das von Docker standardmäßig generierte Gateway manchmal mit unserem LAN-Segment in Konflikt steht. Wenn Docker beispielsweise auf einer Maschine im Netzwerksegment 172.16 bereitgestellt wird und die resultierende Docker0-Netzwerkbrücke das Netzwerksegment 172.17 ist, ist dies der Fall Es liegt ein Konflikt zwischen Maschinen im Netzwerksegment vor (d. h. die Maschine im Netzwerksegment 172.17 kann nicht angepingt werden).
(Empfohlenes Tutorial: Docker-Tutorial)
Um Konflikte zu vermeiden, fällt mir als Erstes ein, das Gateway zu ändern. Das Beispiel ist wie folgt (am Beispiel von Centos):
service docker stop # 删除docker防火墙过滤规则 iptables -t nat -F POSTROUTING # 删除docker默认网关配置 ip link set dev docker0 down ip addr del 172.17.0.1/16 dev docker0 # 增加新的docker网关配置 ip addr add 192.168.2.1/24 dev docker0 ip link set dev docker0 up # 检测是否配置成功,如果输出信息中有 192.168.5.1,则表明成功 ip addr show docker0 service docker start # 验证docker防火墙过滤规则
Danach ändern, ist es zuverlässig? Die Antwort lautet „Nein“, denn nach dem Neustart von Docker wird docker0 möglicherweise noch neu erstellt und überschreibt dabei die von uns vorgenommenen Änderungen. Es zeigt, dass die IP-Regeln von Docker fest codiert sind und wir sie nicht nach Belieben ändern dürfen. Aber lasst uns unsere Denkweise ändern, docker0 direkt töten und eine neue Brücke neu erstellen:
Zuerst müssen wir das Bridge-Erstellungstool brctl installieren:
sudo yum install -y bridge-utils
Starten Sie den Erstellungsvorgang:
# 1.停止 Docker 服务 service docker stop # 2.创建新的网桥(新的网段) brctl addbr bridge0 ip addr add 192.168.2.1/24 dev bridge0 ip link set dev bridge0 up # 3.确认网桥信息 ip addr show bridge0 # 4.修改配置文件 /etc/docker/daemon.json(如不存在则创建一个 touch daemon.json),使Docker启动时使用自定义网桥 { "bridge": "bridge0" } # 5.重启 Docker service docker start # 确认 NAT 网络路由 iptables -t nat -L -n # 6.删除不再使用的网桥 ip link set dev docker0 down brctl delbr docker0 iptables -t nat -F POSTROUTING
Bezüglich der in Schritt 4 vorgenommenen geänderten Konfiguration finden Sie hier ist das Zitat Die neue Bridge kann tatsächlich in der Docker-Konfigurationsdatei referenziert werden:
echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/sysconfig/docker sudo service docker start
Dies bedeutet jedoch nicht, dass wir die benutzerdefinierte Docker-Konfigurationsdatei definitiv sehen können, wenn es keine Standard-/Docker- oder Sysconfig-/Docker-Dateien gibt. Es wird schwieriger sein. Lösen Sie es. Die Methode lautet wie folgt:
$ vi /lib/systemd/system/docker.service #添加一行 $ EnvironmentFile=-/etc/default/docker 或者 $ EnvironmentFile=-/etc/sysconfig/docker #-代表ignore error #并修改 $ ExecStart=/usr/bin/docker daemon -H fd:// #改成 $ ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS #这样才能使用/etc/default/docker里定义的DOCKER_OPTS参数 $ systemctl daemon-reload 重载 $ sudo service docker restart
Nachdem wir die Erstellung von Bridge0 abgeschlossen und von Docker0 zu Bridge0 gewechselt haben, können wir es weiterleiten, um zu bestätigen, ob es ein 172.17-Netzwerksegment gibt, das wir nicht sehen möchten :
Solange dies nicht der Fall ist, werden wir nicht nur das Herz mit der Maschine im Netzwerksegment 172.17 verbinden. Wenn noch eine vorhanden ist, verwenden Sie die IP-Adresse del 172.17.0.1/16 dev docker0, bis sie gelöscht ist (da eine neue Docker-Brücke eingerichtet wurde, hat das Löschen der alten keine Auswirkungen auf die Verwendung von Docker).
Wenn die von brctl erstellte Netzwerkbrücke nach dem Neustart der Maschine möglicherweise verloren geht, können wir den folgenden Befehl in das Linux-Selbststartskript schreiben und es bei jedem Neustart ausführen:
brctl addbr bridge0 ip addr add 192.168.2.1/24 dev bridge0 ip link set dev bridge0 up
Das Selbststartskript kann übergeben werden in /etc/rc Fügen Sie ausführbare Anweisungen (z. B. sh /opt/script.sh &) zur .local-Datei hinzu. Auf diese Weise kann grundsätzlich bei jedem Neustart der Maschine sichergestellt werden, dass Bridge0 erstellt wird und der Docker-Dienst normal gestartet werden kann.
Außerdem: Wenn Sie nur den IP-Netzwerksegmentkonflikt lösen möchten und nicht bereit sind, den oben genannten komplizierten Prozess durchzuführen, können Sie einfach /etc/docker/daemon.json ändern, indem Sie den Inhalt „bip“ hinzufügen: „ip/ netmask". Ändern Sie das Netzwerksegment der Docker0-Bridge wie folgt:
[root@iZ2ze278r1bks3c1m6jdznZ ~]# cat /etc/docker/daemon.json { "bip":"192.168.2.1/24" }
Das obige ist der detaillierte Inhalt vonÄndern Sie das Docker-Standard-Gateway. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!