¿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>

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 

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.