Docker ist eine beliebte Open-Source-Containerisierungsplattform, die es Entwicklern und Betreibern erleichtert, Anwendungen zu erstellen, bereitzustellen und auszuführen. Docker erreicht die Isolation, indem es mehrere virtuelle Container auf einem einzigen Host ausführt, von denen jeder eine andere Anwendung oder einen anderen Dienst ausführen kann.
Aber manchmal stoßen wir auf ein solches Problem: Mehrere Docker-Container werden auf demselben Host bereitgestellt und die Container können nicht aufeinander zugreifen. Dies ist für das Entwicklungs-, Betriebs- und Wartungspersonal sehr problematisch, da die Kommunikation zwischen Containern der Schlüssel zum normalen Betrieb von Anwendungen ist.
In diesem Artikel werden die Gründe erläutert, warum Docker-Container nicht miteinander kommunizieren können, und Lösungen bereitgestellt.
Jedem Docker-Container wird standardmäßig eine IP-Adresse zugewiesen, und auf diese IP-Adresse kann nur auf dem Host zugegriffen werden Maschine. Wenn mehreren Containern die gleiche IP-Adresse zugewiesen wird, können die Container nicht aufeinander zugreifen. Zu diesem Zeitpunkt müssen wir die Netzwerkadresse des Containers neu konfigurieren.
Zuerst können wir den Befehl docker network ls verwenden, um die Netzwerkkonfiguration von Docker anzuzeigen. Beispielsweise können wir den folgenden Befehl verwenden, um die Standardnetzwerkinformationen anzuzeigen:
$ docker network ls
Als nächstes können wir den Befehl docker network inspect verwenden, um die Netzwerkkonfiguration des Containers anzuzeigen, beispielsweise: #🎜🎜 #
$ docker network inspect bridge
$ docker run -itd --name mycontainer1 --network mynetwork --ip 172.18.0.10 myimage
In diesem Befehl geben wir den Namen an , Netzwerkname und IP-Adresse des Containers.
Problem bei der Konfiguration der SicherheitsgruppeWir können die Netzwerkeinstellungen in Docker verwenden, um Sicherheitsgruppenregeln zu konfigurieren. Beispielsweise können wir den folgenden Befehl verwenden, um ein neues Netzwerk zu erstellen und die Kommunikationsregeln zwischen Containern festzulegen:
$ docker network create --subnet 172.18.0.0/16 mynetwork
In diesem Befehl erstellen wir ein neues Netzwerk mit dem Namen „mynetwork“ und geben das Subnetz dieses Netzwerks an.
Als nächstes können wir den Docker-Run-Befehl verwenden, um die Container zu starten und zum Netzwerk hinzuzufügen. Mit dem folgenden Befehl können wir beispielsweise zwei Container starten und zum mynetwork-Netzwerk hinzufügen:
$ docker run -d --name mycontainer1 --network mynetwork --ip 172.18.0.2 myimage $ docker run -d --name mycontainer2 --network mynetwork --ip 172.18.0.3 myimage
Mit diesem Befehl starten wir jeweils zwei Container und weisen sie mynetwork im Netzwerk zu. Beachten Sie, dass wir die IP-Adresse jedes Containers angeben, um sicherzustellen, dass sie miteinander kommunizieren können.
Schließlich können wir den Befehl iptables verwenden, um Sicherheitsgruppenregeln zu konfigurieren, zum Beispiel:
$ iptables -I DOCKER-USER -i mynetwork ! -s 172.18.0.0/16 -d 172.18.0.0/16 -j DROP
In diesem Befehl geben wir eine Regel an, um zu verhindern, dass andere Netzwerke auf das mynetwork zugreifen Netzwerkcontainer. Auf diese Weise können wir sicherstellen, dass die Kommunikation zwischen Containern sicher ist.
DNS-KonfigurationsproblemZu diesem Zeitpunkt müssen wir den DNS-Server von Docker konfigurieren. Docker verwendet den Standard-DNS-Server von Google, um Domänennamen aufzulösen, wir können aber auch andere DNS-Server verwenden.
Um den DNS-Server von Docker zu konfigurieren, können wir die Datei daemon.json von Docker bearbeiten. In einem Linux-System können wir beispielsweise den folgenden Befehl verwenden, um diese Datei zu öffnen:
$ sudo vi /etc/docker/daemon.json
In dieser Datei können wir den DNS-Server von Docker angeben. Zum Beispiel:
{ "dns": ["8.8.8.8", "8.8.4.4"] }
In dieser Konfiguration geben wir zwei DNS-Server an, bei denen es sich um die DNS-Server von Google handelt.
Nach Abschluss können wir den Docker-Dienst neu starten, damit die Konfiguration wirksam wird:
$ sudo systemctl restart docker
Jetzt können wir den Namen des Docker-Containers verwenden, um auf andere Container zuzugreifen.
Fazit
Das Problem, dass Docker-Container nicht miteinander kommunizieren können, kann ein Problem mit der Container-Netzwerkkonfiguration, der Sicherheitsgruppenkonfiguration oder der DNS-Konfiguration sein. Indem wir diese Konfigurationen überprüfen und notwendige Änderungen vornehmen, können wir dieses Problem leicht beheben.
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn Docker-Container nicht miteinander kommunizieren können?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!