Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

459
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda