Docker expose tous les ports ou la plage de ports de 7000 à 8000

97

Puis-je spécifier une plage de ports dans un Dockerfile

EXPOSE 7000-8000

et lors de l'exécution du conteneur lier tous ces ports exposés aux mêmes ports sur la machine hôte?

docker run -p 7000-8000:7000-8000
DarVar
la source
2
Copie possible de Docker: exposer une gamme de ports
Michael Irigoyen

Réponses:

134

Depuis Docker 1.5, vous pouvez désormais exposer une plage de ports à d'autres conteneurs liés en utilisant:

La commande Dockerfile EXPOSE :

EXPOSE 7000-8000

ou La commande d' exécution Docker :

docker run --expose=7000-8000

Ou à la place, vous pouvez publier une plage de ports sur la machine hôte via la commande d' exécution Docker :

docker run -p 7000-8000:7000-8000

DarVar
la source
14
Vérifiez la sortie de "iptables -L -n" sur la machine hôte et vous verrez des centaines de lignes chacune pour le mappage de port unique. Si vous donnez 5000-50000, alors pratiquement vous devez attendre longtemps. Est-ce le comportement supposé?
的 devrimbaris
8
@ 的 devrimbaris Un processus docker est également lancé par port . Je crois que c'est ce qui prend la plupart du temps de travail.
Matt
1
la documentation parle du --publish-all , -Pdrapeau qui "Publie tous les ports exposés sur des ports aléatoires". docs.docker.com/engine/reference/commandline/run
nils petersohn
2

Pour toute personne confrontée à ce problème et se retrouvant sur ce post ... le problème est toujours ouvert - https://github.com/moby/moby/issues/11185

Gh0sT
la source
Merci beaucoup. Je devenais fou car tout restait bloqué en essayant d'exposer une plage de mille ports.
sarusso le