¿Cómo puedo exponer más de 1 puerto con Docker?

Respuestas:

716

Para exponer solo un puerto, esto es lo que debe hacer:

docker run -p <host_port>:<container_port>

Para exponer múltiples puertos, simplemente proporcione múltiples -pargumentos:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
Tania Ang
fuente
44
¡Gracias! Encontré esto en los documentos aquí: docs.docker.com/userguide/dockerlinks/… donde diceNote: The -p flag can be used multiple times to configure multiple ports.
Ted M. Young
¿Hay alguna manera de especificar los puertos en un archivo de configuración? Por ejemplo, usando la opción --env-file?
Giovanni Bitliner
8
@GiovanniBitliner Todavía soy bastante nuevo en esto, pero estoy bastante seguro de que definirías puertos en un Dockerfile con EXPOSE , luego realizarías docker run -P(ten en cuenta las mayúsculas) que expone automáticamente todos los puertos definidos con EXPOSE en el Dockerfile
Ted Avery
¿Múltiples puertos pueden detener el proceso de inicio bajo un archivo de servicio systemd?
Lanti
1
Creo que el término correcto aquí publishno es expose.
tgogos
290

Paso 1

En su Dockerfile, puede usar el verbo EXPOSEpara exponer múltiples puertos.
p.ej

EXPOSE 3000 80 443 22

Paso 2

Luego le gustaría construir una nueva imagen basada en lo anterior Dockerfile.
p.ej

docker build -t foo:tag .

Paso 3

A continuación, puede utilizar la -pde asignar el puerto host con el puerto de contenedores, tal como se define en el anterior EXPOSEde Dockerfile.
p.ej

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

En caso de que desee exponer un rango de puertos continuos, puede ejecutar docker de esta manera:

docker run -it -p 7100-7120:7100-7120/tcp 
mainframer
fuente
17
EXPOSE es solo documentación para los puertos que se publican y es útil solo para vincular. Se puede encontrar una lista completa de puertos usando -P y se asignarán automáticamente a un puerto disponible en el host.
Arun Gupta
44
Exponer no es necesario. Elimine el primer paso o hágalo opcional.
AmirHossein
27

si usa el docker-compose.ymlarchivo:

services:
    varnish:
        ports:
            - 80
            - 6081

También puede especificar el host / puerto de red

varnish:
    ports:
        - 80:80
        - 6081:6081
Rashidul Islam
fuente
0

Si está creando un contenedor a partir de una imagen y desea exponer múltiples puertos (no publicar), puede usar el siguiente comando:

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

Ahora, cuando inicie este contenedor con el docker startcomando, los puertos configurados arriba estarán expuestos.

PhantomReference
fuente