Maison > Article > Opération et maintenance > Que dois-je faire si les conteneurs Docker ne peuvent pas communiquer entre eux ?
Docker est une plate-forme de conteneurisation open source populaire qui permet aux développeurs et aux opérateurs de créer, déployer et exécuter plus facilement des applications. Docker réalise l'isolation en exécutant plusieurs conteneurs virtuels sur un seul hôte, chacun pouvant exécuter une application ou un service différent.
Cependant, nous rencontrons parfois un tel problème : plusieurs conteneurs Docker sont déployés sur le même hôte, et les conteneurs ne peuvent pas accéder les uns aux autres. Ceci est très gênant pour le personnel de développement, d'exploitation et de maintenance, car la communication entre les conteneurs est la clé du fonctionnement normal des applications.
Cet article abordera les raisons pour lesquelles les conteneurs Docker ne peuvent pas communiquer entre eux et proposera des solutions.
Chaque conteneur Docker se voit attribuer une adresse IP par défaut, et cette adresse IP n'est accessible que sur la machine hôte. Si plusieurs conteneurs se voient attribuer la même adresse IP, ils ne peuvent pas accéder les uns aux autres. À ce stade, nous devons reconfigurer l'adresse réseau du conteneur.
Tout d’abord, nous pouvons utiliser la commande docker network ls pour afficher la configuration réseau de Docker. Par exemple, nous pouvons utiliser la commande suivante pour afficher les informations du réseau par défaut :
$ docker network ls
Ensuite, nous pouvons utiliser la commande docker network inspect pour afficher la configuration réseau du conteneur, par exemple :
$ docker network inspect bridge
S'il y a un problème avec la configuration réseau du conteneur, nous pouvons redémarrer le conteneur et spécifier l'adresse IP à l'aide de la commande suivante :
$ docker run -itd --name mycontainer1 --network mynetwork --ip 172.18.0.10 myimage
Dans cette commande, nous spécifions le nom, le nom du réseau et l'adresse IP du conteneur.
Une autre raison pour laquelle les conteneurs Docker ne peuvent pas accéder les uns aux autres est que le groupe de sécurité n'est pas configuré correctement. Un groupe de sécurité est un pare-feu virtuel qui contrôle le trafic réseau entrant et sortant d'un conteneur. Si les règles du groupe de sécurité d'un conteneur n'autorisent pas l'accès à d'autres conteneurs, les conteneurs ne peuvent pas accéder les uns aux autres.
Nous pouvons configurer les règles du groupe de sécurité à l'aide des paramètres réseau dans Docker. Par exemple, nous pouvons utiliser la commande suivante pour créer un nouveau réseau et spécifier les règles de communication entre les conteneurs :
$ docker network create --subnet 172.18.0.0/16 mynetwork
Dans cette commande, nous créons un nouveau réseau nommé monréseau et spécifions le sous-réseau du réseau.
Ensuite, nous pouvons utiliser la commande docker run pour démarrer les conteneurs et les ajouter au réseau. Par exemple, nous pouvons utiliser la commande suivante pour démarrer deux conteneurs et les ajouter au réseau mynetwork :
$ 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
Dans cette commande, nous démarrons respectivement deux conteneurs et les assignons au réseau mynetwork. Notez que nous spécifions l'adresse IP de chaque conteneur pour garantir qu'ils peuvent communiquer entre eux.
Enfin, nous pouvons utiliser la commande iptables pour configurer les règles du groupe de sécurité, par exemple :
$ iptables -I DOCKER-USER -i mynetwork ! -s 172.18.0.0/16 -d 172.18.0.0/16 -j DROP
Dans cette commande, nous spécifions une règle qui empêche les autres réseaux d'accéder au conteneur du réseau mynetwork. De cette façon, nous pouvons garantir que la communication entre les conteneurs est sécurisée.
Nous savons que les conteneurs Docker peuvent accéder les uns aux autres via les noms de conteneurs et les adresses IP. Toutefois, si le nom du conteneur ne peut pas être résolu en adresse IP, les conteneurs ne peuvent pas accéder les uns aux autres.
À ce stade, nous devons configurer le serveur DNS de Docker. Docker utilise le serveur DNS Google par défaut pour résoudre les noms de domaine, mais nous pouvons également utiliser d'autres serveurs DNS.
Pour configurer le serveur DNS de Docker, nous pouvons éditer le fichier daemon.json de Docker. Par exemple, dans un système Linux, on peut ouvrir ce fichier avec la commande suivante :
$ sudo vi /etc/docker/daemon.json
Dans ce fichier, on peut spécifier le serveur DNS de Docker. Par exemple :
{ "dns": ["8.8.8.8", "8.8.4.4"] }
Dans cette configuration, nous spécifions deux serveurs DNS, qui sont les serveurs DNS de Google.
Une fois terminé, nous pouvons redémarrer le service Docker pour que la configuration prenne effet :
$ sudo systemctl restart docker
Maintenant, nous pouvons utiliser le nom du conteneur Docker pour accéder à d'autres conteneurs.
Conclusion
Le problème selon lequel les conteneurs Docker ne peuvent pas communiquer entre eux peut être un problème avec la configuration du réseau de conteneurs, la configuration du groupe de sécurité ou la configuration DNS. En vérifiant ces configurations et en apportant les modifications nécessaires, nous pouvons facilement résoudre ce problème.
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!