Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

460
Vistas
¿Qué hace realmente la opción --net=host en el comando Docker?

Soy un poco principiante en Docker. No pude encontrar ninguna descripción clara de lo que hace esta opción en el comando de ejecución de la ventana acoplable en profundidad y estoy un poco confundido al respecto.

¿Podemos usarlo para acceder a las aplicaciones que se ejecutan en contenedores docker sin especificar un puerto? Como ejemplo, si ejecuto una aplicación web implementada a través de una imagen acoplable en el puerto 8080 usando la opción -p 8080:8080 en el comando de ejecución acoplable, sé que tendré que acceder a ella en el puerto 8080 en los contenedores Docker ip /theWebAppName. Pero realmente no puedo pensar en cómo funciona la opción --net=host .

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Después de la instalación de la ventana acoplable, tiene 3 redes por defecto:

 docker network ls NETWORK ID NAME DRIVER SCOPE f3be8b1ef7ce bridge bridge local fbff927877c1 host host local 023bb5940080 none null local

Estoy tratando de mantener esto simple. Entonces, si inicia un contenedor de forma predeterminada, se creará dentro de la red del puente (docker0).

 $ docker run -d jenkins 1498e581cdba jenkins "/bin/tini -- /usr..." 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp friendly_bell

En el dockerfile de jenkins se exponen los puertos 8080 y 50000 . Esos puertos están abiertos para el contenedor en su red de puentes. Entonces, todo lo que esté dentro de esa red puente puede acceder al contenedor en los puertos 8080 y 50000 . Todo en la red puente está en el rango privado de "Subnet": "172.17.0.0/16", si desea acceder a ellos desde el exterior, debe mapear los puertos con -p 8080:8080 . Esto asignará el puerto de su contenedor al puerto de su servidor real (la red host). Por lo tanto, acceder a su servidor en 8080 se enrutará a su red puente en el puerto 8080 .

Ahora también tienes tu red host. Que no contenedoriza la red de contenedores. Entonces, si inicia un contenedor en la red host, se verá así (es el primero):

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1efd834949b2 jenkins "/bin/tini -- /usr..." 6 minutes ago Up 6 minutes eloquent_panini 1498e581cdba jenkins "/bin/tini -- /usr..." 10 minutes ago Up 10 minutes 8080/tcp, 50000/tcp friendly_bell

La diferencia está en los puertos. Su contenedor ahora está dentro de su red de host. Entonces, si abre el puerto 8080 en su host, accederá al contenedor de inmediato.

 $ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT

Abrí el puerto 8080 en mi firewall y cuando ahora estoy accediendo a mi servidor en el puerto 8080 , estoy accediendo a mi jenkins. Creo que este blog también es útil para entenderlo mejor.

about 4 years ago · Santiago Trujillo Denunciar

0

La opción --net=host se usa para hacer que los programas dentro del contenedor Docker parezcan estar ejecutándose en el propio host, desde la perspectiva de la red. Le permite al contenedor un mayor acceso a la red de lo que normalmente puede obtener.

Normalmente, debe reenviar los puertos desde la máquina host a un contenedor, pero cuando los contenedores comparten la red del host, cualquier actividad de la red ocurre directamente en la máquina host, tal como sucedería si el programa se ejecutara localmente en el host en lugar de dentro de un envase.

Si bien esto significa que ya no tiene que exponer puertos y asignarlos a puertos de contenedor, significa que debe editar sus Dockerfiles para ajustar los puertos en los que escucha cada contenedor, para evitar conflictos, ya que no puede tener dos contenedores operando en el mismo Puerto host. Sin embargo, la verdadera razón de esta opción es ejecutar aplicaciones que necesitan acceso a la red que es difícil de reenviar a través de un contenedor a nivel de puerto.

Por ejemplo, si desea ejecutar un servidor DHCP, debe poder escuchar el tráfico de transmisión en la red y extraer la dirección MAC del paquete. Esta información se pierde durante el proceso de reenvío de puertos, por lo que la única forma de ejecutar un servidor DHCP dentro de Docker es ejecutar el contenedor como --net=host .

En términos generales, --net=host solo se necesita cuando ejecuta programas con necesidades de red muy específicas e inusuales.

Por último, desde una perspectiva de seguridad, los contenedores Docker pueden escuchar en muchos puertos, aunque solo anuncien (expongan) un único puerto. Normalmente, esto está bien, ya que solo reenvía el único puerto esperado; sin embargo, si usa --net=host , obtendrá todos los puertos del contenedor escuchando en el host, incluso aquellos que no figuran en el Dockerfile. Esto significa que deberá revisar el contenedor de cerca (especialmente si no es suyo, por ejemplo, uno oficial provisto por un proyecto de software) para asegurarse de no exponer inadvertidamente servicios adicionales en la máquina.

about 4 years ago · Santiago Trujillo Denunciar

0

Recuerde un punto: el controlador de red del host solo funciona en hosts Linux y no es compatible con Docker Desktop para Mac, Docker Desktop para Windows o Docker EE para Windows Server.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda