📚 Docker pour les débutants : Le Chantier Naval

3.2 : Focus : EXPOSE vs PORTS. Pourquoi EXPOSE ne suffit pas pour accéder à mon site ?

📄 Article ⏱ 5 ✅ Gratuit

Pourquoi EXPOSE ne suffit pas pour accéder à mon site ?

Maintenant que nous avons vu le mapping de ports, il est important de comprendre la différence entre deux notions souvent confondues :

  • EXPOSE dans le Dockerfile
  • -p ou --publish dans docker run

EXPOSE : une simple déclaration

EXPOSE sert à indiquer quel port le conteneur utilise.

Exemple dans un Dockerfile :

FROM nginx
EXPOSE 80
  • Cela ne crée pas de redirection vers l’extérieur.
  • C’est une sorte de documentation pour Docker et pour les développeurs.

Pensez à EXPOSE comme un post-it sur la porte : “Ce conteneur écoute sur le port 80”.
Mais le post-it ne fait pas sortir le signal à l’extérieur.

-p/--publish : le vrai transfert

Pour que votre site soit accessible depuis votre machine ou Internet, il faut mapper le port interne à un port externe avec :

docker run -p PORT_EXTERNE:PORT_INTERNE image

Exemple concret avec Nginx :

docker run -p 8080:80 nginx
  • 8080 → votre machine
  • 80 → port interne du conteneur

Sans cette étape, même si le Dockerfile contient EXPOSE 80, personne ne pourra accéder à votre site.

Comparaison rapide

FonctionEXPOSE-p / –publish
Indique le port du service❌ (optionnel)
Rend le port accessible depuis l’extérieur
UtilitéDocumentation et bonnes pratiquesTransfert effectif de port

Exemple concret

Dockerfile :

FROM nginx
EXPOSE 80
  • Le conteneur écoute sur le port 80.
  • Mais EXPOSE seul ne rend pas le port accessible depuis votre machine.

Commande de lancement sans mapping :

docker run nginx
  • Le conteneur démarre, le port 80 existe à l’intérieur, mais
    vous ne pouvez pas accéder à Nginx depuis votre navigateur (http://localhost ne fonctionne pas).

Commande de lancement avec mapping de ports :

docker run -p 8080:80 nginx
  • Docker redirige le port 8080 de votre machine vers le port 80 du conteneur.
  • Vous pouvez maintenant ouvrir votre navigateur sur :
http://localhost:8080
  • Et accéder à votre site Nginx.

Schéma visuel simplifié

Votre machine           Conteneur Docker
--------------- -----------------
localhost:8080 ---> nginx:80
(port externe) (port interne)
  • Sans -p : aucune flèche → inaccessible
  • Avec -p : flèche vers le conteneur → accessible

EXPOSE indique juste que le port existe,
-p effectue la redirection réelle.