Comment puis-je exposer plus d'un port avec Docker?

Réponses:

716

Pour exposer un seul port, voici ce que vous devez faire:

docker run -p <host_port>:<container_port>

Pour exposer plusieurs ports, fournissez simplement plusieurs -parguments:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
Tania Ang
la source
4
Merci! Trouvé cela dans les documents ici: docs.docker.com/userguide/dockerlinks/… où il est ditNote: The -p flag can be used multiple times to configure multiple ports.
Ted M. Young
Existe-t-il un moyen de spécifier les ports dans un fichier de configuration? Par exemple, en utilisant l'option --env-file?
Giovanni Bitliner
8
@GiovanniBitliner Je suis encore assez nouveau, mais je suis sûr que vous définiriez des ports dans un Dockerfile avec EXPOSE , puis effectueriez docker run -P(notez les majuscules) qui expose automatiquement tous les ports définis avec EXPOSE dans le Dockerfile
Ted Avery
Plusieurs ports peuvent arrêter le processus d'initialisation sous un fichier de service systemd?
Lanti
1
Je pense que le terme correct ici n'est publishpas expose.
tgogos
290

Étape 1

Dans votre Dockerfile, vous pouvez utiliser le verbe EXPOSEpour exposer plusieurs ports.
par exemple

EXPOSE 3000 80 443 22

Étape 2

Vous souhaitez ensuite créer une nouvelle image basée sur ce qui précède Dockerfile.
par exemple

docker build -t foo:tag .

Étape 3

Ensuite, vous pouvez utiliser -ppour mapper le port hôte avec le port conteneur, comme défini ci EXPOSE- dessus de Dockerfile.
par exemple

docker run -p 3001:3000 -p 23:22

Si vous souhaitez exposer une gamme de ports continus, vous pouvez exécuter docker comme ceci:

docker run -it -p 7100-7120:7100-7120/tcp 
mainframer
la source
17
EXPOSE est uniquement une documentation pour les ports qui sont publiés et utile pour la liaison uniquement. Une liste complète des ports peut être trouvée en utilisant -P et ils seront automatiquement mappés sur un port disponible sur l'hôte.
Arun Gupta
4
Exposer n'est pas nécessaire. Supprimez la première étape ou rendez-la facultative.
AmirHossein
27

si vous utilisez un docker-compose.ymlfichier:

services:
    varnish:
        ports:
            - 80
            - 6081

Vous pouvez également spécifier le port hôte / réseau

varnish:
    ports:
        - 80:80
        - 6081:6081
Rashidul Islam
la source
0

Si vous créez un conteneur à partir d'une image et souhaitez exposer plusieurs ports (pas publier), vous pouvez utiliser la commande suivante:

docker create --name container name--expose 7000 --expose 7001image name

Maintenant, lorsque vous démarrez ce conteneur à l'aide de la docker startcommande, les ports configurés ci-dessus seront exposés.

PhantomReference
la source