X vs Y ~1 min de lecture

Docker : la différence entre EXPOSE et -p

EXPOSE 3000 dans un Dockerfile ne publie pas le port 3000 sur l’hôte.

Deux colonnes comparent EXPOSE et -p. À gauche, EXPOSE 3000 décrit le port dans l’image sans le publier. À droite, -p 8080:3000 relie le port 8080 de l’hôte au port 3000 du container.
Le diagramme distingue la déclaration d’un port dans l’image de sa publication sur l’hôte au lancement du container.

Dans un Dockerfile, EXPOSE 3000 indique le port prévu pour l’application. Cette déclaration ajoute une information à l’image, mais ne publie aucun port sur l’hôte.

Par exemple, si l’image mon-api contient cette déclaration, la commande docker run mon-api ne crée aucune publication. Avec docker run -p 8080:3000 mon-api, Docker achemine les connexions reçues sur le port 8080 de l’hôte vers le port 3000 du container. L’application doit accepter ces connexions pour répondre.

L’option -p fonctionne sans déclaration EXPOSE préalable. Modifier le Dockerfile pour y ajouter cette déclaration ne remplace donc pas la publication au lancement.

EXPOSE décrit un port ; -p le publie sur l’hôte.