La technologie Docker est devenue l'une des technologies de conteneurs les plus utilisées dans le cloud computing depuis sa sortie en 2013. Il permet aux développeurs de déployer et d'exécuter facilement des applications dans différents environnements en les regroupant dans un conteneur portable. Cependant, dans certains scénarios, la configuration réseau des conteneurs Docker peut devenir un peu compliquée. Par exemple, lorsque nous avons besoin que le conteneur communique avec le réseau externe, nous rencontrons parfois des situations dans lesquelles le conteneur ne peut pas mettre à jour automatiquement la table ARP, provoquant le blocage de la communication réseau. Cet article explique pourquoi Docker ne met pas à jour ARP et comment y remédier.
ARP (Address Resolution Protocol) est un protocole utilisé pour résoudre les adresses MAC sur le réseau. Lorsqu'un hôte doit communiquer avec un autre hôte, il doit d'abord connaître l'adresse MAC de l'hôte cible. Dans la plupart des cas, cela ne pose pas de problème car lorsqu'un hôte communique pour la première fois avec un autre hôte, il envoie une requête ARP au réseau local pour obtenir l'adresse MAC de l'hôte cible. Cependant, dans le cas des conteneurs Docker, ce processus peut s'avérer problématique.
Docker est basé sur la technologie de virtualisation du noyau Linux et utilise l'espace de noms réseau Linux et les technologies de pontage réseau pour fournir des fonctions réseau aux conteneurs. Nous pouvons utiliser l'espace de noms réseau et les fonctions de pontage réseau pour connecter la carte réseau virtuelle du conteneur à la carte réseau physique de l'hôte. Cependant, lorsqu'un conteneur envoie un paquet, Docker enregistre l'adresse IP et l'adresse MAC du conteneur dans la table ARP de l'hôte Docker lors de la création du conteneur. De cette manière, lorsque d'autres hôtes ont besoin de communiquer avec le conteneur, ils peuvent obtenir l'adresse MAC du conteneur à partir de la table ARP de l'hôte Docker. Cependant, lorsque l'adresse IP du conteneur change, Docker ne met pas automatiquement à jour les enregistrements de la table ARP, ce qui entraîne le blocage de la communication réseau.
Il existe de nombreuses façons de résoudre le problème de Docker qui ne met pas à jour ARP. Une méthode consiste à vider manuellement le cache ARP de l'hôte Docker. Nous pouvons le faire en exécutant la commande suivante :
sudo ip -s -s neigh flush all
Cette commande effacera le cache ARP sur l'hôte Docker, obligeant ainsi Docker à mettre à jour les enregistrements dans la table ARP. De plus, nous pouvons également utiliser la table ARP du conteneur en exécutant la commande suivante : arping
命令,对容器进行 Ping 测试,以强制 Docker 更新 ARP 表。例如,如果我们想要更新 IP 地址为 172.17.0.3
sudo arping -U 172.17.0.3
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!