Gestion des Configurations de Ports des Conteneurs
Maintenant que nous comprenons comment inspecter et accéder aux services conteneurisés, explorons quelques concepts supplémentaires de gestion des ports.
Scénarios Communs de Gestion des Ports
Voici quelques scénarios courants que vous pourriez rencontrer :
1. Modification des Mappages de Ports
Si le port 8080 est déjà utilisé sur votre hôte, vous pouvez mapper vers un port différent :
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 8081:80 nginx
Maintenant, le conteneur Nginx est accessible sur le port 8081 :
curl localhost:8081
2. Liaison à des Interfaces Spécifiques
Au lieu de se lier à toutes les interfaces (0.0.0.0), vous pouvez vous lier à une IP spécifique :
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -p 127.0.0.1:8080:80 nginx
Ceci lie le port du conteneur uniquement à l'interface localhost, le rendant inaccessible de l'extérieur de l'hôte.
3. Utilisation de Ports Hôtes Aléatoires
Si vous ne vous souciez pas du port hôte utilisé, laissez Docker en assigner un :
docker stop web-demo
docker rm web-demo
docker run -d --name web-demo -P nginx
L'option -P publie tous les ports exposés vers des ports aléatoires sur l'hôte.
Vérifiez le port assigné :
docker port web-demo
Sortie :
80/tcp -> 0.0.0.0:49153
Le numéro de port exact variera, mais dans cet exemple, le port 80 a été mappé au port 49153.
Dépannage des Problèmes de Ports Courants
Voici des solutions aux problèmes courants liés aux ports :
- Port déjà utilisé : Si vous voyez une erreur comme "port is already allocated", choisissez un port différent :
docker run -d --name another-web -p 8082:80 nginx
- Le conteneur ne peut pas se connecter à l'hôte : Si un conteneur doit se connecter à un service sur l'hôte, utilisez le nom DNS Docker spécial
host.docker.internal au lieu de localhost :
docker run --rm alpine ping -c 2 host.docker.internal
- Vérification du processus qui utilise un port : Si un port est déjà utilisé sur l'hôte, trouvez le processus :
sudo lsof -i :8080
Nettoyage
Nettoyons nos conteneurs :
docker stop web-demo redis-demo
docker rm web-demo redis-demo