tag registrarse pricing hub docker port public

registrarse - download docker image



Cómo publicar puertos en archivos docker (3)

Hay una diferencia entre exponer y publicar .

Exponer significa abrir el puerto en el lado del contenedor, publicar significa abrirlo en el host Docker al mundo exterior.

Por ejemplo, si el comando de ejecución de la ventana acoplable tenía -p 80: 8080 , está exponiendo el puerto 8080 en el contenedor y el puerto de publicación 80 en el host.

Solo puede exponer realmente los puertos en el Dockerfile, si desea la flexibilidad para publicar los puertos, deberá usar el botón -P que opta con la ejecución de la ventana acoplable. Al igual que:

docker run -P your_app

Necesito asignar los puertos en el host a los puertos en el contenedor. Puedo lograrlo ejecutando el comando "docker run" con la opción -p . ¿Cómo logro esto a través del Dockerfile ? El uso de lo siguiente da un "deprecated error"

EXPOSE 80:8080

¿De qué otra manera puedo hacer públicos los puertos expuestos a través del archivo docker?


Lo que puede hacer es EXPOSE una lista de puertos en su Dockerfile y luego ejecutar el comando docker run -P your_app para publicar todos los puertos expuestos en el Dockerfile


Usted no puede Los puertos que se publican en el host de la ventana acoplable son estrictamente una decisión que debe tomar el administrador local, no la imagen que intentan ejecutar; esto sería (a) un problema de seguridad (hey, ¡acabo de abrir el acceso ssh a su sistema!) y (b) es propenso a fallar (mi contenedor de servidor web no se puede enlazar en el puerto 80 porque ya estoy ejecutando un servidor en puerto 80).

Si desea evitar largas líneas de comando de docker run , considere usar algo como la docker-compose para automatizar el proceso. A continuación, puede pasar una ventana acoplable-componer una configuración como:

mywebserver: image: myname/mywebserver ports: - 80:8080

Y luego, un simple docker-compose up iniciará su contenedor con el puerto de contenedor 8080 enlazado al puerto de host 80.

Actualización 2017-03-11

En respuesta al comentario de Willa:

  • El uso de docker-compose no ayudará con el problema de colisión de puertos. El problema de colisión de puertos es una razón por la que las imágenes no deberían poder especificar enlaces de puertos de host. Simplemente estaba ofreciendo docker-compose como alternativa a las largas líneas de comando de docker run con múltiples enlaces de puertos. El problema de colisión de puertos podría permitir que un contenedor realice un ataque de denegación de servicio en su host: si, por ejemplo, un contenedor se inicia y se enlaza al puerto 80 antes de un servidor Apache en su host (o en otro contenedor), entonces Usted acaba de perder su servicio web.

  • Con respecto al problema de seguridad: si una imagen pudiera especificar enlaces de puertos de host, sería posible que los contenedores abran el acceso al contenedor sin su conocimiento. Permitir que un usuario remoto acceda a un contenedor en su host lo abre a la posibilidad de un compromiso de host en el caso de que las funciones de espacio de nombres en el kernel no logren aislar completamente el contenedor, e incluso si confía completamente en el aislamiento, se abrirá. a posibles problemas legales si ese contenedor se utiliza para fines ilícitos. En cualquier caso es una mala idea.