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

Theorie: Die zwei Jahre User Experience

<br />Es ist nicht länger als zwei Jahre her...

Wissen zur Suchmaschinenoptimierung, auf das Sie beim Webdesign achten sollten

1. Linklayout der neuen Site-Startseite 1. Die Pos...

JavaScript realisiert den Drag-Effekt der Modalbox

Hier ist ein Fall des Ziehens einer modalen Box. ...

Eine kurze Analyse der parallelen WriteSet-Replikation von MySQL

【Historischer Hintergrund】 Ich arbeite seit drei ...

js zum Aufrufen der Netzwerkkamera und Behandeln häufiger Fehler

Vor kurzem musste ich aus geschäftlichen Gründen ...

Spezifische Verwendung von GNU Parallel

Was ist das? GNU Parallel ist ein Shell-Tool zum ...

So ändern Sie die Länge eines Eingabetextfelds entsprechend seinem Inhalt

Erste: Code kopieren Der Code lautet wie folgt: &l...

Tutorial zur MySQL-Installation unter Linux (Binärdistribution)

Dieses Tutorial beschreibt Ihnen die detaillierte...

Eine kurze Analyse der expliziten Typkonvertierung von MySQL

CAST-Funktion Im vorherigen Artikel haben wir die...

So verwenden Sie GeoIP, um Regionen in Nginx einzuschränken

Dieser Blog ist eine Arbeitsnotiz Umfeld: Nginx-V...