A --net=host
opção é usada para fazer com que os programas dentro do contêiner do Docker pareçam estar sendo executados no próprio host, da perspectiva da rede. Ele permite ao contêiner um maior acesso à rede do que ele normalmente pode obter.
Normalmente você tem que encaminhar portas da máquina host para um contêiner, mas quando os contêineres compartilham a rede do host, qualquer atividade de rede acontece diretamente na máquina host - assim como aconteceria se o programa estivesse sendo executado localmente no host em vez de dentro de um recipiente.
Embora isso signifique que você não precisa mais expor as portas e mapeá-las para portas de contêiner, significa que você precisa editar seus Dockerfiles para ajustar as portas nas quais cada contêiner escuta, para evitar conflitos, pois não é possível ter dois contêineres operando no mesmo porta do host. No entanto, o verdadeiro motivo para essa opção é a execução de aplicativos que precisam de acesso à rede difícil de encaminhar para um contêiner no nível da porta.
Por exemplo, se você deseja executar um servidor DHCP, você precisa ser capaz de ouvir o tráfego de broadcast na rede e extrair o endereço MAC do pacote. Essas informações são perdidas durante o processo de encaminhamento de porta, portanto, a única maneira de executar um servidor DHCP dentro do Docker é executar o contêiner como --net=host
.
De modo geral, --net=host
é necessário apenas quando você executa programas com necessidades de rede incomuns e muito específicas.
Por último, de uma perspectiva de segurança, os contêineres do Docker podem escutar em muitas portas, embora eles apenas anunciem (exponham) uma única porta. Normalmente, isso é bom, pois você apenas encaminha a única porta esperada; no entanto, se você usar --net=host
, terá todas as portas do contêiner escutando no host, mesmo aquelas que não estão listadas no Dockerfile. Isso significa que você precisará verificar o contêiner de perto (especialmente se não for seu, por exemplo, um oficial fornecido por um projeto de software) para ter certeza de não expor inadvertidamente serviços extras na máquina.
--net=host
dentro de um Dockerfile?