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.

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.