# 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 :

```bash
-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 exemple `127.0.0.1`.

<p class="callout info">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.</p>

### Exemples avec strm/helloworld-http

L'image [ 🔗 strm/helloworld-http](https://hub.docker.com/r/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.

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/31T6VfCRO3aHtsun-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/31T6VfCRO3aHtsun-image.png)

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/J3oNu6UmNP7ZdI2C-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/J3oNu6UmNP7ZdI2C-image.png)

Néanmoins, le port `80` de la machine hôte **ne répond pas** :

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/6MPwn428WptYXigg-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/6MPwn428WptYXigg-image.png)

<p class="callout warning">Le port `80` de la machine hôte **n'est pas automatiquement redirigé** vers celui du conteneur.</p>

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`.

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/f6NV3uszBUw9Otst-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/f6NV3uszBUw9Otst-image.png)

Un `docker ps -a` nous confirme que le port `90` de la machine hôte est redirigé vers le port `80` du conteneur.

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/eDMbtQqFJsv7MybL-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/eDMbtQqFJsv7MybL-image.png)

La page web est accessible depuis `127.0.0.1:90`. Elle est également accessible depuis le LAN, toujours sur le port `90`.

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/FtS0WTjyWoROAuw5-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/FtS0WTjyWoROAuw5-image.png)

Il est possible de n'écouter que depuis l'IP `127.0.0.1` avec `-p 127.0.0.1:90:80`.

[![image.png](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/scaled-1680-/8Pqr2DolnI37IyU5-image.png)](https://formation.tfrichet.fr/uploads/images/gallery/2025-08/8Pqr2DolnI37IyU5-image.png)

<p class="callout info">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.</p>