La gestion des ports
Redirection des ports
La plupart des applications dockerisées écoutent sur des ports spécifiques. Par exemple : serveurs web, bases de données, API, etc.
Pour les rendre accessibles depuis l'extérieur, il faut rediriger ces ports avec l'option --port
, -p
.
Cette option permet de lier un port du conteneur à un port de la machine hôte.
Dans le détail, lorsqu'une requête est envoyée à un port de la machine hôte, Docker la redirige automatiquement vers le port correspondant à l'intérieur du conteneur.
La syntaxe de -p
est la suivante :
-p [IP:]PORT_HOTE:PORT_CONTENEUR
PORT_CONTENEUR
: le port sur lequel l'application à l'intérieur du conteneur écoute.PORT_HOTE
: le port de la machine hôte sur lequel les requêtes externes seront reçues.IP
(facultative) : permet de restreindre l'accès à une IP spécifique, par exemple127.0.0.1
.
La redirection de ports docker permet de répondre à des cas d'usages fréquents : contrôle d'accès aux applications, gestion des conflits de port avec des applications similaires, configuration d'architectures réseaux complexes, etc.
Exemples avec strm/helloworld-http
L'image 🔗 strm/helloworld-http permet d'afficher un message test et écoute sur le port 80
, port HTTP
par défaut.
Une fois lancé, un docker ps -a
nous confirme que le port 80
du conteneur est ouvert.
Néanmoins, le port 80
de la machine hôte ne répond pas :
Le port 80
de la machine hôte n'est pas automatiquement redirigé vers celui du conteneur.
Il faut lancer le container avec l'argument -p
. Il est tout à fait possible d'indiquer un autre port pour l'hôte, par exemple 90
.
Un docker ps -a
nous confirme que le port 90
de la machine hôte est redirigé vers le port 80
du conteneur.
La page web est accessible depuis 127.0.0.1:90
. Elle est également accessible depuis le LAN, toujours sur le port 90
.
Il est possible de n'écouter que depuis l'IP 127.0.0.1
avec -p 127.0.0.1:90:80
.
Cela peut-être utile pour faire fonctionner une application derrière un reverse proxy (traefik, apache, nginx, etc.) afin de lui attribuer un nom de domaine.