Comment publier des ports dans le panneau fichiers
J'ai besoin de mapper les ports de l'hôte vers les ports sur le conteneur. Je peux réaliser cela en exécutant la "docker run"
de commande avec le -p
option. Comment puis-je obtenir ce par le biais de la Dockerfile
?
À l'aide de la suite donne un "deprecated error"
EXPOSE 80:8080
Sinon, comment puis-je faire de l'exposé des ports publics à travers le dockerfile?
OriginalL'auteur user_mda | 2015-09-23
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas. Quels sont les ports qui sont publiés sur le panneau d'accueil est strictement une décision qui devrait être prise par l'administrateur local, et non par l'image qu'ils essaient de courir; ce serait (a) un problème de sécurité (hey, j'ai juste ouvert un accès ssh à votre système!) et (b) sujettes à l'échec (de mon serveur conteneur ne peut pas se lier sur le port 80 car je suis déjà en cours d'exécution d'un serveur sur le port 80).
Si vous voulez éviter les longues
docker run
lignes de commande, pensez à utiliser quelque chose comme docker-composer pour automatiser le processus. Vous pouvez ensuite passer docker-composer une configuration comme celle-ci:Puis une simple
docker-compose up
pourrez commencer votre conteneur conteneur port 8080 liés à l'hôte, le port 80.Mise à jour 2017-03-11
En réponse à Willa commentaire:
À l'aide de
docker-compose
ne va pas aider avec le port de collision question. Le port de collision question est une raison pourquoi les images ne devraient pas être en mesure de spécifier de port de l'hôte liaisons. J'étais tout simplement en offrantdocker-compose
comme une alternative à longdocker run
lignes de commande avec plusieurs port liaisons. Le port de collision problème pourrait permettre à un conteneur pour y effectuer un déni de service (ddos) sur votre ordinateur hôte: si, par exemple, un conteneur commence et se lie à port 80 avant d'un serveur Apache sur votre ordinateur hôte (ou dans un autre conteneur), alors vous avez juste perdu votre service web.Concernant le problème de sécurité: Si une image ont été en mesure de préciser de port de l'hôte liaisons, il serait possible pour les conteneurs à ouvrir l'accès au conteneur à votre insu. Permet à un utilisateur distant d'accéder à un conteneur sur votre hôte vous ouvre la possibilité d'un accueil de compromis dans le cas où l'espace de noms de fonctions dans le noyau ne parviennent pas à isoler complètement le récipient, et même si vous faites totalement confiance à l'isolement, il vous ouvre à d'éventuels problèmes juridiques si le conteneur est utilisé à des fins illicites. Dans les deux cas c'est une mauvaise idée.
Comment est l'utilisation de docker-composition de résoudre le potentiel pour le port de collision? D'ailleurs pouvez-vous préciser un peu sur la question de la sécurité?
OriginalL'auteur larsks
Il y a une différence entre exposer et publier.
Exposer les moyens d'ouvrir le port sur le conteneur de côté, de publier des moyens pour l'ouvrir sur le Panneau d'accueil à l'extérieur.
Par exemple, si votre panneau de commande d'exécution avait -p 80:8080, c'est d'exposer le port 8080 sur le conteneur et de la publication le port 80 sur l'ordinateur hôte.
Vous ne pouvez vraiment exposer les ports dans le Dockerfile, si vous voulez la flexibilité de publier les ports, vous aurez besoin d'utiliser l'option-p optant avec docker run.
OriginalL'auteur Michael
Ce que vous pouvez faire est de
EXPOSE
une liste de ports sur votreDockerfile
et plus tard l'exécution de la commandedocker run -P your_app
de publier tous les ports exposés sur le DockerfileOriginalL'auteur Fabián Bertetto