Quelle est la différence entre les ports docker-compose et expos

Dans le fichier docker-compose.yml, il existe des options pour les ports et expose . Comment sont-ils différents?

Selon la référence docker-compose ,

Les ports sont définis comme suit:

Exposer les ports . Spécifiez les deux ports (HOST: CONTAINER) ou simplement le port du conteneur (un port hôte aléatoire sera choisi).

  • Les ports mentionnés dans docker-compose.yml seront partagés entre les différents services lancés par docker-compose.
  • Les ports seront exposés à la machine hôte sur un port aléatoire ou un port donné.

Mon docker-compose.yml ressemble à

 mysql: image: mysql:5.7 ports: - "3306" 

Si je docker-compose up , cela ressemblera à ceci:

 $ docker-compose ps 10:27:28 Name Command State Ports ------------------------------------------------------------------------------------- mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:32769->3306/tcp 

Expose est défini comme suit:

Exposez les ports sans les publier sur la machine hôte – ils ne seront accessibles qu’aux services liés. Seul le port interne peut être spécifié.

Les ports ne sont pas exposés aux machines hôtes, mais uniquement aux autres services.

 mysql: image: mysql:5.7 expose: - "3306" 

Si je docker-compose up , cela ressemblera à ceci:

  Name Command State Ports --------------------------------------------------------------- mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp