364 votes

Quelle est la difference entre docker-compose ports vs expose

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

444voto

bibstha Points 520

Selon le docker-composition de référence,

Ports est défini comme:

Exposer les ports. Spécifier les deux ports (de l'HÔTE:CONTENEUR), ou tout simplement le port à conteneurs (un hasard de port de l'hôte sera choisi).

  • Les Ports mentionnés dans le panneau-composer.yml sera partagée entre les différents services a commencé par le menu fixe-composer.
  • Les Ports seront exposés à l'hôte de la machine sur un port aléatoire ou un port donné.

Mon docker-compose.yml ressemble:

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

Si je n' docker-compose ps, il ressemblera à:

  Name                     Command               State            Ports
-------------------------------------------------------------------------------------
  mysql_1       docker-entrypoint.sh mysqld      Up      0.0.0.0:32769->3306/tcp

Exposer est défini comme:

Exposer les ports sans les publier à l'ordinateur 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 à des machines hôtes, à seulement exposés à d'autres services.

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

Si je n' docker-compose ps, il ressemblera à:

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

20voto

sorabzone Points 54

Les Ports Cette section est utilisée pour définir la correspondance entre le serveur hôte et conteneur Docker.

ports:
   - 10005:80

Il signifie que l'application en cours d'exécution à l'intérieur du conteneur est exposée au port 80. Mais externe du système/de l'entité ne peut pas y accéder, il besoin d'être relié à d'hôte du serveur de port.

Remarque: vous devez ouvrir le port hôte 10005 et de modifier les règles de pare-feu pour permettre à des entités externes pour accéder à l'application.

Ils peuvent utiliser

http://{IP de l'hôte}:10005

quelque chose comme ceci

EXPOSER C'est exclusivement utilisé pour définir le port sur lequel l'application est en cours d'exécution à l'intérieur du conteneur docker.

Vous pouvez le définir dans dockerfile. En général, il est bon et pratique largement utilisée pour définir les EXPOSER à l'intérieur de dockerfile parce que très rarement quelqu'un de les exécuter sur un autre port que le port 80 par défaut le port

2voto

medTech Points 104

Je suis totalement d'accord avec les réponses avant. Je voudrais juste mentionner que la différence entre les exposer et les ports fait partie du concept de sécurité dans le panneau. Elle va de pair avec la mise en réseau de docker. Par exemple:

Imaginez une application avec un front-end web et une base de données back-end. Le monde extérieur a besoin d'accéder au web front-end (peut-être sur le port 80), mais seulement la fin elle-même a besoin d'un accès à la base de données de l'hôte et le port. À l'aide d'un définis par l'utilisateur pont, seul le port doit être ouvert, et l'application de base de données n'a pas besoin de ports ouverts, depuis le front-end web peut atteindre plus de défini par l'utilisateur pont.

Il s'agit d'un cas d'utilisation lors de la configuration d'une architecture de réseau dans le panneau. Ainsi, par exemple, à défaut d'un pont réseau, pas de ports sont accessibles depuis le monde extérieur. À cet effet, vous pouvez ouvrir un ingresspoint avec des "ports". Avec l'aide de "dénoncer", vous définissez la communication au sein du réseau. Si vous voulez exposer les ports par défaut vous n'avez pas besoin de définir les "exposer" dans votre menu fixe-composition de fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X