Docker-Compose erstellt eine Brücke, fügt ein Subnetz hinzu und löscht eine Netzwerkkarte

Docker-Compose erstellt eine Brücke, fügt ein Subnetz hinzu und löscht eine Netzwerkkarte

1. Erstellen Sie eine Docker-Netzwerkkarte

[root@i ~]# brctl addbr docker0
[root@i ~]# IP-Adresse hinzufügen 192.168.42.1/24 dev docker0  
# Die IP hier ist für die interne Verwendung in Docker, Sie können jede beliebige konfigurieren[root@i ~]# ip link set dev docker0 up
[root@i ~]# IP-Adresse zeigt Docker0
# Docker anzeigen
[root@i ~]# systemctl Neustart Docker
[root@i ~]# systemctl Neustart Docker
# Starten Sie den Docker-Dienst

2. Fügen Sie ein Subnetz hinzu

[root@i ~]# Docker-Netzwerk, Backend erstellen
# Auf diese Weise haben wir das Backend-Subnetz erstellt, und Docker-Compose kann dieses Netzwerk direkt verwenden
# Wenn das Subnetz nicht üblich ist, verwenden Sie den folgenden Befehl, um das Sicherheitsproblem zu überspringen [root@i ~]# docker network create backend --subnet 172.24.24.0/24
 
[root@i ~]# Docker-Netzwerk ls
NETZWERK-ID-NAME TREIBER-UMFANG
6afff4d90f05 Backend-Brücke lokal
57de7f32064e Brücke Brücke lokal
4b44a5340d6e Host Host lokal
ac8e8ffe243f keine null lokal

Hier sehen Sie das Backend

3. Löschen Sie die Netzwerkkarte

[root@i ~]# brctl anzeigen
#Überprüfen Sie den Bridge-Status Bridge-Name Bridge-ID STP-fähige Schnittstellen
br-5db3fa0c465f 8000.02424cfb3937 nein veth038d483
                            veth2950f5c
                            veth669dc5e
                            veth715203f
                            veth9f31643
                            vethd0f5330
docker0 8000.3a4803cd6298 nein veth9d3badb
                            vethd7530fd
[root@i ~]# brctl delif <Brückenname> <Portname>
#Deinstallieren Sie den Port auf der Bridge [root@i ~]# ifconfig
# Prüfen Sie, ob eine Bridge-Netzwerkkarte mit dem Namen [root@i ~]# vorhanden ist ifconfig <bridge name> down
#Schalten Sie diese Netzwerkkarte aus[root@i ~]# brctl delbr <Bridge-Name>
#Lösche die Brücke

Ergänzung: Die ultimative Lösung für den Konflikt zwischen der von Docker-Compose automatisch erstellten Brücke und dem LAN

1. Problembeschreibung

Wenn Sie Docker-Compose zum Bereitstellen von Anwendungen verwenden, ist der Standardnetzwerkmodus von Docker Bridge und das Standardnetzwerksegment 172.17.0.1/16. Leider verwendet das LAN unserer eigenen physischen Maschine auch das Netzwerksegment 172.18.0.1/16.

Nach der Ausführung von docker-compose -f docker-compose.yml up -d zum Bereitstellen des Dienstes verwendet die automatisch generierte Bridge wiederum 172.18.xx, aber etwas Trauriges ist passiert. Die von Docker generierte Brücke steht in Konflikt mit dem lokalen Netzwerk.

So begann die lange Reise zur Baidu-Programmierung ... Allerdings fand ich über Baidu und Google immer wieder viele Blogs, die voneinander kopiert waren, und versuchte es schließlich immer wieder und scheiterte, konnte mein Problem jedoch letztendlich nicht lösen. Daher wurde dieser Artikel mit einem Goldgehalt von 99,99999999999999999999999999 % veröffentlicht.

Docker-Version für dieses Experiment

[root@node100 docker-compose]# docker info | grep 'Serverversion'
 Serverversion: 19.03.12

2. Lösung

Stoppen Sie den von Docker-Compose erstellten Container

docker-compose -f docker-compose.yml down

Docker-Container manipulieren

# Stoppen Sie den Docker-Container sudo systemctl stop docker
# Stoppen Sie die Docker0-Brücke sudo ip link set dev docker0 down
# Löschen Sie die Docker0-Brücke sudo brctl delbr docker0
# Iptables zurücksetzen
sudo iptables -t nat -F POSTROUTING

PS

# Linux-Brctl-Befehl nicht gefunden, installieren Sie Brctl 
yum installiere Bridge-Utils -y

daemon.json ändern

# Bearbeiten Sie die Datei daemon.json vim /etc/docker/daemon.json
# Fügen Sie den folgenden Inhalt hinzu, einschließlich der Einstellung des IP-Segments des Docker-Containers „default-address-pools“: [
  {
   "Basis": "192.168.0.0/16",
   "Größe" : 24
  }
]

PS

Hinweis: Wenn daemon.json andere Inhalte enthält, denken Sie daran, diese durch Kommas zu trennen.

Starten Sie den Docker-Container neu

sudo systemctl daemon-reload
sudo systemctl starte Docker

Installieren Sie den Docker-Compose-Befehl neu und starten Sie ihn

docker-compose -f docker-compose.yml up -d

3. Expansionsplan

Klicken Sie hier, um einige Lösungen von ISSUES-Meistern zu erhalten

Lösung 1

Lösung 2

Option 3

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Erläuterung der Docker Compose-Netzwerkeinstellungen
  • Eine kurze Diskussion über die Docker-Compose-Netzwerkeinstellungen
  • Docker fügt eine Brücke hinzu und legt den IP-Adressbereich fest
  • Docker-Benutzerdefinierte Brücke Docker0 und Befehlsvorgänge zum Öffnen, Schließen und Neustarten von Docker
  • Eine Fehlerbehebungserfahrung im CentOS-Docker-Bridge-Modus, bei dem auf den Host-Redis-Dienst nicht zugegriffen werden kann

<<:  Deaktivieren der AutoVervollständigen-Funktion im Eingabefeld

>>:  Vergleich von CSS-Schatteneffekten: Schlagschatten und Box-Schatten

Artikel empfehlen

Detaillierter Prozess der SpringBoot-Integration von Docker

Inhaltsverzeichnis 1. Demo-Projekt 1.1 Schnittste...

Implementierung der One-Click-TLS-Verschlüsselung für die Docker-Remote-API

Inhaltsverzeichnis 1. Ändern Sie den Port 2375 vo...

VMware Workstation-Installation unter Linux

Vom Einsteiger bis zum Neueinsteiger ist das Linu...

Beispiel einer datenbankübergreifenden Abfrage in MySQL

Vorwort In MySQL werden datenbankübergreifende Ab...

Leitfaden zur effizienten Nutzung von MySQL-Indizes

Vorwort Ich glaube, die meisten Leute haben MySQL...

Pygame-Code zum Erstellen eines Schlangenspiels

Inhaltsverzeichnis Verwendete Pygame-Funktionen E...

Bei verschachtelten MySQL-Transaktionen aufgetretene Probleme

MySQL unterstützt verschachtelte Transaktionen, a...

So überprüfen Sie, ob der Grafiktreiber erfolgreich in Ubuntu installiert wurde

Führen Sie den Befehl aus: glxinfo | grep renderi...

Bildschirmbefehl und Verwendung unter Linux

Bildschirmeinführung Screen ist eine vom GNU-Proj...

Beispiel, wie nginx dynamische und statische Trennung implementiert

Inhaltsverzeichnis Stellen Sie nginx auf Server1 ...