La --net=host
opción se usa para hacer que los programas dentro del contenedor de Docker parezcan estar ejecutándose en el propio host, desde la perspectiva de la red. Permite al contenedor un mayor acceso a la red del que normalmente puede obtener.
Normalmente, tiene que reenviar puertos desde la máquina host a un contenedor, pero cuando los contenedores comparten la red del host, cualquier actividad de red ocurre directamente en la máquina host, tal como lo harí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 los puertos del 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 la ejecución de aplicaciones que necesitan acceso a la red y que es difícil de reenviar a 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
.
Generalmente hablando, --net=host
solo es necesario cuando se ejecutan 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 anuncian (exponen) un solo puerto. Normalmente, esto está bien, ya que solo reenvía el puerto esperado, sin embargo, si lo usa --net=host
, obtendrá todos los puertos del contenedor escuchando en el host, incluso aquellos que no están listados en el Dockerfile. Esto significa que deberá verificar el contenedor de cerca (especialmente si no es suyo, por ejemplo, uno oficial proporcionado por un proyecto de software) para asegurarse de no exponer inadvertidamente servicios adicionales en la máquina.
--net=host
dentro de un Dockerfile?