Drei Möglichkeiten zur Kommunikation zwischen Docker-Containern

Drei Möglichkeiten zur Kommunikation zwischen Docker-Containern

Wir alle wissen, dass Docker-Container voneinander isoliert sind und nicht aufeinander zugreifen können, aber was ist, wenn es abhängige Dienste gibt? Zur Lösung des Problems des gegenseitigen Containerzugriffs werden die folgenden drei Methoden vorgestellt.

Methode 1: Virtueller IP-Zugriff

Bei der Installation von Docker erstellt Docker standardmäßig ein internes Bridge-Netzwerk Docker0. Jedem erstellten Container wird eine virtuelle Netzwerkkarte zugewiesen, und Container können basierend auf der IP aufeinander zugreifen.

[root@33fcf82ab4dd /]# [root@CentOS ~]# ifconfig
......
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 172.17.0.1 Netzmaske 255.255.0.0 Broadcast 0.0.0.0
    inet6 fe80::42:35ff:feac:66d8 Präfixlänge 64 Bereichs-ID 0x20<link>
    Ether 02:42:35:ac:66:d8 txqueuelen 0 (Ethernet)
    RX-Pakete 4018 Bytes 266467 (260,2 KiB)
    RX-Fehler 0 verloren 0 Überläufe 0 Frame 0
    TX-Pakete 4226 Bytes 33935667 (32,3 MiB)
    TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0
......

Führen Sie ein CentOS-Image aus und überprüfen Sie die IP-Adresse: 172.17.0.7

[root@CentOS ~]# docker run -it --name centos-1 docker.io/centos:latest
[root@6d214ff8d70a /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 172.17.0.7 Netzmaske 255.255.0.0 Broadcast 0.0.0.0
    inet6 fe80::42:acff:fe11:7 Präfixlänge 64 Bereichs-ID 0x20<link>
    Ether 02:42:ac:11:00:07 txqueuelen 0 (Ethernet)
    RX-Pakete 16 Bytes 1296 (1,2 KiB)
    RX-Fehler 0 verloren 0 Überläufe 0 Frame 0
    TX-Pakete 8 Bytes 648 (648,0 B)
    TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0

Führen Sie denselben Befehl aus, um einen weiteren Container zu starten und die IP-Adresse zu überprüfen: 172.17.0.8

[root@CentOS ~]# docker run -it --name centos-2 docker.io/centos:latest
[root@33fcf82ab4dd /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 172.17.0.8 Netzmaske 255.255.0.0 Broadcast 0.0.0.0
    inet6 fe80::42:acff:fe11:8 Präfixlänge 64 Bereichs-ID 0x20<link>
    Ether 02:42:ac:11:00:08 txqueuelen 0 (Ethernet)
    RX-Pakete 8 Bytes 648 (648,0 B)
    RX-Fehler 0 verloren 0 Überläufe 0 Frame 0
    TX-Pakete 8 Bytes 648 (648,0 B)
    TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0

Die Ergebnisse des Ping-Tests innerhalb des Containers sind wie folgt:

[root@33fcf82ab4dd /]# ping 172.17.0.7
PING 172.17.0.7 (172.17.0.7) 56(84) Bytes Daten.
64 Bytes von 172.17.0.7: icmp_seq=1 ttl=64 Zeit=0,205 ms
64 Bytes von 172.17.0.7: icmp_seq=2 ttl=64 Zeit=0,119 ms
64 Bytes von 172.17.0.7: icmp_seq=3 ttl=64 Zeit=0,118 ms
64 Bytes von 172.17.0.7: icmp_seq=4 ttl=64 Zeit=0,101 ms

Diese Methode erfordert die Kenntnis der IP-Adresse jedes Containers, was in der Praxis nicht praktikabel ist.

Methode 2: Link

Fügen Sie beim Ausführen des Containerlinks Parameter hinzu

Ausführen des ersten Containers

docker run -it --name centos-1 docker.io/centos:latest

Ausführen des zweiten Containers

[root@CentOS ~]# docker run -it --name centos-2 --link centos-1:centos-1 docker.io/centos:latest

--link: Das erste centos-1 im Parameter ist der Containername und das zweite centos-1 ist der definierte Containeralias (verwenden Sie den Alias, um auf den Container zuzugreifen). Der Benutzerfreundlichkeit halber ist der Alias ​​im Allgemeinen standardmäßig der Containername.

Die Testergebnisse lauten wie folgt:

[root@e0841aa13c5b /]# ping centos-1
PING centos-1 (172.17.0.7) 56(84) Bytes Daten.
64 Bytes von Centos-1 (172.17.0.7): icmp_seq=1 ttl=64 Zeit=0,210 ms
64 Bytes von Centos-1 (172.17.0.7): icmp_seq=2 ttl=64 Zeit=0,116 ms
64 Bytes von Centos-1 (172.17.0.7): icmp_seq=3 ttl=64 Zeit=0,112 ms
64 Bytes von Centos-1 (172.17.0.7): icmp_seq=4 ttl=64 Zeit=0,114 ms

Diese Methode stellt Anforderungen an die Reihenfolge, in der Container erstellt werden. Wenn mehrere Container im Cluster aufeinander zugreifen müssen, ist die Verwendung nicht sehr praktisch.

Methode 3: Erstellen Sie ein Brückennetzwerk

1. Führen Sie nach der Installation von Docker den folgenden Befehl aus, um ein Bridge-Netzwerk zu erstellen: docker network create testnet

Das neu erstellte Bridge-Testnetz wird abgefragt.

2. Führen Sie den Container aus, um eine Verbindung mit dem Testnet-Netzwerk herzustellen.

Verwendung: docker run -it --name <Containername> ---network <Bridge> --network-alias <Netzwerkalias> <Imagename>

[root@CentOS ~]# docker run -it --name centos-1 --network testnet --network-alias centos-1 docker.io/centos:latest
[root@CentOS ~]# docker run -it --name centos-2 --network testnet --network-alias centos-2 docker.io/centos:latest

3. Ping von einem Container zum anderen. Die Testergebnisse sind wie folgt:

[root@fafe2622f2af /]# ping centos-1
PING centos-1 (172.20.0.2) 56(84) Bytes Daten.
64 Bytes von centos-1.testnet (172.20.0.2): icmp_seq=1 ttl=64 Zeit=0,158 ms
64 Bytes von centos-1.testnet (172.20.0.2): icmp_seq=2 ttl=64 Zeit=0,108 ms
64 Bytes von centos-1.testnet (172.20.0.2): icmp_seq=3 ttl=64 Zeit=0,112 ms
64 Bytes von centos-1.testnet (172.20.0.2): icmp_seq=4 ttl=64 Zeit=0,113 ms

4. Wenn Sie auf den Dienst im Container zugreifen möchten, können Sie diese Methode verwenden, um auf <Netzwerkalias> zuzugreifen: <Dienst-Portnummer>

Es wird empfohlen, diese Methode zum Anpassen des Netzwerks zu verwenden. Da der Netzwerkalias verwendet wird, müssen Sie sich keine Gedanken darüber machen, ob sich die IP ändert. Sie können aufeinander zugreifen, solange Sie in Docker eine Verbindung zum Bright-Netzwerk herstellen. Es können mehrere Brücken eingerichtet werden, um sie in verschiedenen Netzwerksegmenten zu isolieren.

Oben sind die Details der drei Methoden des gegenseitigen Zugriffs auf Docker-Container aufgeführt. Weitere Informationen zum gegenseitigen Zugriff auf Docker-Container finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detailliertes grafisches Tutorial zum Aktivieren des sicheren Remotezugriffs mit Docker
  • Lösung für das Problem, dass beim Hinzufügen eines Tomcat-Containers zu Docker kein Zugriff auf die Homepage möglich ist
  • So greifen Sie über eine unabhängige IP direkt auf das Docker-für-Windows-Container-Intranet zu
  • Eine Fehlerbehebungserfahrung im CentOS-Docker-Bridge-Modus, bei dem auf den Host-Redis-Dienst nicht zugegriffen werden kann
  • Detaillierte Erklärung zur Verwendung von Docker zum Erstellen von extern zugänglichem MySQL
  • Detaillierte Erläuterung zur Lösung des Problems, dass der Docker-Container nicht über IP auf den Hostcomputer zugreifen kann
  • So greifen Sie in Docker auf den lokalen Computer (Hostcomputer) zu
  • So verwenden Sie einen Docker-Container für den Zugriff auf das Host-Netzwerk
  • Lösung für das Problem, dass Docker Nginx nach dem Ausführen nicht mehr aufgerufen werden kann
  • Methode zum Zugriff auf unabhängige IP im Docker-Container

<<:  SQL-Zusammenführungsvorgang von Abfrageergebnissen von Tabellen mit unterschiedlichen Spalten

>>:  Das Vue-Projekt realisiert Anmelde- und Registrierungseffekte

Artikel empfehlen

So beheben Sie die durch MySQL DDL verursachte Synchronisierungsverzögerung

Inhaltsverzeichnis Vorwort Lösung Tool-Einführung...

Vue implementiert das gleichzeitige Einstellen mehrerer Countdowns

In diesem Artikelbeispiel wird der spezifische Co...

Anweisungen zur Verwendung des HTML-Tags dl dt dd

Grundaufbau: Code kopieren Der Code lautet wie fol...

Eine kurze Erläuterung, wann MySQL interne temporäre Tabellen verwendet

Gewerkschaftsexekution Verwenden Sie zur Vereinfa...

Reiner CSS3-Code zur Implementierung einer laufenden Uhr

Wirkung der OperationCode-Implementierung html &l...

Detaillierte Analyse der MySQL Master-Slave-Replikation

Vorwort: In MySQL sollte die Master-Slave-Archite...

HTML+CSS zum Erstellen einer Schaltfläche im Cyberpunk-Stil

Erster Blick auf die Wirkung: Vorwort: Auf diese ...

Installieren Sie .NET 6.0 im CentOS-System mithilfe eines Cloud-Servers

.NET SDK-Download-Link https://dotnet.microsoft.c...

Grundlegende Verwendung und Fallstricke der JavaScript-Array-Methode sort()

Vorwort Bei der täglichen Codeentwicklung gibt es...

Erläuterung verschiedener Möglichkeiten zum Ausführen von Tomcat unter Linux

Tomcat unter Linux starten und herunterfahren Sta...