Docker est un moteur de conteneurisation open source très populaire. Il est largement utilisé dans les environnements de développement et de production car il peut être construit rapidement, facile à gérer et garantit la portabilité des applications. Cependant, lorsque vous utilisez Docker pour créer une application Web, il n'est pas rare que les ports soient incapables de communiquer. Aujourd'hui, nous analyserons les raisons et les solutions au port Web bloqué construit par Docker.
1. Analyse des causes
Le service de pare-feu iptables est activé par défaut dans le système Linux. Si vous ne l'avez pas configuré, le pare-feu peut empêcher votre conteneur Docker de communiquer avec le réseau externe. Par conséquent, vous pouvez désactiver le pare-feu ou ajouter des règles afin que Docker puisse communiquer en douceur avec le réseau externe. Ce qui suit est une commande de référence :
Fermez le pare-feu : $ sudo service iptables stop
Ouvrir le port : $ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Une fois que Docker a démarré le conteneur, mappez le port du conteneur à un port de l'hôte via le mappage de port pour établir la communication entre le conteneur et le réseau externe. Par défaut, le réseau du conteneur est indépendant et ne communique qu'en interne. Par conséquent, si vous ne mappez pas les ports à l’intérieur du conteneur, le port risque de ne pas pouvoir communiquer. Voici la méthode de mappage du port par défaut :
$ docker run -p 80:80 image-name
Il existe trois pilotes réseau dans Docker, à savoir pont, hôte et aucun. Lors de l'utilisation de conteneurs Docker, le pilote réseau pont est utilisé par défaut, formant un réseau virtuel basé sur le réseau NAT. Si votre conteneur ne peut pas accéder au réseau externe, vous devrez peut-être vérifier si votre pilote réseau est correctement sélectionné. Vous pouvez utiliser la commande suivante pour afficher le pilote réseau :
$ docker network ls
Une fois que Docker a démarré le conteneur, il attribuera une adresse IP unique basée sur le pilote réseau. Si l'adresse IP de votre conteneur ne peut pas accéder au réseau externe, vous devez vérifier si la carte réseau qui y est connectée est correctement configurée. Dans l'exemple suivant, nous pouvons voir que l'adresse IP du conteneur est 172.17.0.2 :
$ docker inspect containers-name | grep IPAddress
2. Solution
Vous peut utiliser la méthode suivante Vérifiez la relation de mappage de port :
$ nom du conteneur du port docker
Le contenu de sortie doit être :
80/tcp -> 0.0.0.0:80
La commande ci-dessus peut vérifier le mappage de port. à l'intérieur du conteneur vers le port hôte.
Vous pouvez utiliser la méthode suivante pour vérifier le type de réseau utilisé par le conteneur :
$ docker inspect containers-name | grep NetworkMode
Si la sortie est bridge, il signifie que le pilote réseau a été sélectionné correctement. Si la sortie est host ou none, vous pouvez la modifier comme suit :
Changez le type de réseau en bridge :
$ docker run --network bridge image-name
OK Lors de l'exécution de la commande Docker, ajoutez un paramètre --privileged afin que le conteneur Docker dispose d'autorisations relativement élevées :
$ docker run --privileged image-name
Vous pouvez utiliser la commande suivante pour vérifier l'adresse IP du conteneur :
$ docker inspect containers-name | grep IPAddress
Si l'adresse IP de votre conteneur change, vous pouvez utiliser la commande suivante pour réattribuer une adresse IP unique :
$ docker run --ip 172.17.0.10 image -name
En bref, lorsque le port d'application Web démarré par votre Docker ne peut pas communiquer, vous devez d'abord rechercher la cause de cette situation, puis résoudre le problème de la manière correspondante. J'espère que cet article pourra aider tout le monde.
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!