Die Docker-Technologie hat sich seit ihrer Veröffentlichung im Jahr 2013 zu einer der am weitesten verbreiteten Containertechnologien im Cloud Computing entwickelt. Es ermöglicht Entwicklern die einfache Bereitstellung und Ausführung von Anwendungen in verschiedenen Umgebungen, indem sie sie in einen tragbaren Container packen. In manchen Szenarien kann die Netzwerkkonfiguration von Docker-Containern jedoch etwas kompliziert werden. Wenn wir beispielsweise den Container für die Kommunikation mit dem externen Netzwerk benötigen, kommt es manchmal vor, dass der Container die ARP-Tabelle nicht automatisch aktualisieren kann, was dazu führt, dass die Netzwerkkommunikation blockiert wird. In diesem Artikel erfahren Sie, warum Docker ARP nicht aktualisiert und wie Sie das Problem beheben können.
ARP (Address Resolution Protocol) ist ein Protokoll, das zur Auflösung von MAC-Adressen im Netzwerk verwendet wird. Wenn ein Host mit einem anderen Host kommunizieren muss, muss er zunächst die MAC-Adresse des Zielhosts kennen. In den meisten Fällen stellt dies kein Problem dar, da ein Host bei der ersten Kommunikation mit einem anderen Host eine ARP-Anfrage an das lokale Netzwerk sendet, um die MAC-Adresse des Zielhosts zu erhalten. Bei Docker-Containern kann dieser Vorgang jedoch problematisch sein.
Docker basiert auf der Linux-Kernel-Virtualisierungstechnologie und nutzt Linux-Netzwerk-Namespace- und Netzwerk-Bridging-Technologien, um Netzwerkfunktionen für Container bereitzustellen. Wir können die Funktionen Netzwerk-Namespace und Netzwerküberbrückung verwenden, um die virtuelle Netzwerkkarte des Containers mit der physischen Netzwerkkarte des Hosts zu verbinden. Wenn ein Container jedoch ein Paket sendet, registriert Docker beim Erstellen des Containers die IP-Adresse und MAC-Adresse des Containers in der ARP-Tabelle des Docker-Hosts. Wenn andere Hosts auf diese Weise mit dem Container kommunizieren müssen, können sie die MAC-Adresse des Containers aus der ARP-Tabelle des Docker-Hosts abrufen. Wenn sich jedoch die IP-Adresse des Containers ändert, aktualisiert Docker die Datensätze in der ARP-Tabelle nicht automatisch, was dazu führt, dass die Netzwerkkommunikation blockiert wird.
Es gibt viele Möglichkeiten, das Problem zu lösen, dass Docker ARP nicht aktualisiert. Eine Methode besteht darin, den ARP-Cache des Docker-Hosts manuell zu löschen. Wir können dies tun, indem wir den folgenden Befehl ausführen:
sudo ip -s -s neigh flush all
Dieser Befehl löscht den ARP-Cache auf dem Docker-Host und zwingt Docker dadurch, die Datensätze in der ARP-Tabelle zu aktualisieren. Darüber hinaus können wir auch die ARP-Tabelle des Containers verwenden, indem wir den folgenden Befehl ausführen: arping
命令,对容器进行 Ping 测试,以强制 Docker 更新 ARP 表。例如,如果我们想要更新 IP 地址为 172.17.0.3
sudo arping -U 172.17.0.3
Das obige ist der detaillierte Inhalt vonEntdecken Sie die Gründe, warum Docker ARP nicht aktualisiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!