Ports
El ports
va publier les ports sur l'hôte. Docker configurera un transfert pour un port spécifique du réseau hôte vers le conteneur. Par défaut, ceci est implémenté avec un processus proxy en espace utilisateur ( docker-proxy
) qui écoute sur le premier port, et transmet au conteneur, qui doit écouter sur le deuxième point. Si le conteneur n'écoute pas sur le port de destination, vous verrez toujours quelque chose qui écoute sur l'hôte, mais vous obtiendrez un refus de connexion si vous essayez de vous connecter au port de l'hôte, à partir du transfert échoué dans votre conteneur.
Notez que le conteneur doit être à l'écoute sur toutes les interfaces réseau, car ce proxy n'est pas exécuté dans l'espace de noms du réseau du conteneur et ne peut pas atteindre 127.0.0.1 à l'intérieur du conteneur. La méthode IPv4 pour cela consiste à configurer votre application pour écouter sur 0.0.0.0
.
Notez également que les ports publiés ne fonctionnent pas dans le sens inverse. Vous ne pouvez pas vous connecter à un service sur l'hôte à partir du conteneur en publiant un port. Au lieu de cela, vous trouverez des erreurs de docker essayant d'écouter le port de l'hôte déjà utilisé.
Exposez
Expose la documentation. Il définit les métadonnées sur l'image, et lorsqu'il est exécuté, sur le conteneur également. En général, vous configurez ceci dans le Dockerfile avec l'option EXPOSE
et il sert de documentation pour les utilisateurs qui exécutent votre image, pour qu'ils sachent sur quels ports par défaut votre application écoutera. Lorsqu'elles sont configurées à l'aide d'un fichier de composition, ces métadonnées ne sont définies que sur le conteneur. Vous pouvez voir les ports exposés lorsque vous exécutez la commande docker inspect
sur l'image ou le conteneur.
Il y a quelques outils qui dépendent des ports exposés. Dans docker, le -P
publiera tous les ports exposés sur des ports éphémères sur l'hôte. Il existe également différents reverse proxies qui utiliseront par défaut un port exposé lors de l'envoi de trafic vers votre application si vous ne définissez pas explicitement le port du conteneur.
En dehors de ces outils externes, expose n'a aucun impact sur la mise en réseau des conteneurs. Il suffit d'avoir un réseau docker commun, et de se connecter au port du conteneur, pour accéder à un conteneur à partir d'un autre. Si ce réseau est créé par l'utilisateur (par exemple, pas le réseau de pont par défaut nommé bridge
), vous pouvez utiliser le DNS pour vous connecter aux autres conteneurs.