Como se conectar ao host local dentro de um contêiner Docker

by Admin

Ao trabalhar com o Docker, você normalmente coloca em contêiner os serviços que formam sua pilha e usa a rede entre contêineres para se comunicar entre eles. Às vezes, você pode precisar de um contêiner para se comunicar com um serviço em seu host que não foi armazenado em contêineres. Veja como acessar localhost ou 127.0.0.1 de dentro de um contêiner do Docker.

A opção fácil

O Docker Desktop 18.03+ para Windows e Mac oferece suporte a host. docker. internal como um alias funcional para localhost. Use esta string dentro de seus contêineres para acessar sua máquina host.

  • localhost e 127.0.0.1 – Eles são resolvidos no contêiner.
  • host. docker. internal – Isso resolve para o host externo.

Se você estiver executando um servidor MySQL em seu host, os contêineres do Docker podem acessá-lo conectando-se a host. docker. internal: 3306. Esta é a técnica mais simples quando você está trabalhando em uma máquina Windows ou Mac.

Os usuários do Docker Engine no Linux também podem habilitar host. docker. internal por meio do sinalizador –add-host para a execução do docker. Comece seus contêineres com este sinalizador para expor a string do host:

 docker run -d --add-host host. docker. internal: host-gateway my-container: mais recente 

O sinalizador –add-host adiciona uma entrada ao arquivo container &’ s / etc / hosts. O valor mostrado acima mapeia host. docker. internal para o gateway do host do contêiner, que corresponde ao valor real do host local. Você pode substituir host. docker. internal por sua própria string, se preferir.

Conectando-se à rede host

O Docker fornece uma rede de host que permite que os contêineres compartilhem a pilha de rede do seu host. Essa abordagem significa que o localhost dentro de um contêiner é resolvido para o host físico, em vez do próprio contêiner.

Publicidade

Os contêineres são iniciados com a rede do host adicionando o sinalizador –network = host:

 docker run -d --network = host my-container: mais recente 

Agora seu contêiner pode fazer referência a localhost ou 127.0.0.1 diretamente.

Se você estiver usando o Docker Compose, modifique a definição de serviço do seu contêiner para incluir o campo network_mode:

serviços: my-service: network_mode: host

Existem algumas ressalvas nesta abordagem. É importante considerar todas as implicações antes de usá-lo. Os contêineres normalmente obtêm sua própria rede privada, que é separada da pilha do host. Quando você especifica –network = host, o padrão do contêiner herda as configurações de rede compartilhada do seu host.

Todas as portas expostas pelo contêiner serão expostas no host, mesmo se não forem explicitamente declaradas com o sinalizador -p. O nome de host padrão do contêiner corresponderá ao host, embora isso possa ser alterado com o sinalizador –hostname.

A rede host pode ser uma preocupação de segurança que quebra o modelo de isolamento dos contêineres Docker. Ele ainda pode ser útil em cenários em que você tem certeza de que a execução de contêineres não entrará em conflito entre si ou causará problemas em seu ambiente de host. O modo de rede do host também é mais rápido do que o modo de ponte padrão, pois não há camada de virtualização para o tráfego passar.

Acessando o host com o modo de ponte padrão

Seu host ainda pode ser acessado de contêineres no modo de rede de ponte padrão. Você só precisa fazer referência a ele por seu IP de rede Docker, em vez de localhost ou 127.0.0.1.

Publicidade

A maioria das instalações do Docker Engine representará o host como 172.17.0.1 na rede de ponte docker0 padrão. Você pode verificar seu próprio IP executando este comando em seu host:

 endereço IP mostrar docker0 

O IP do Docker do seu host será mostrado na linha inet. Conecte-se a este endereço IP de dentro de seus contêineres para acessar com êxito os serviços em execução em seu host.

Uma armadilha dessa abordagem é que você pode não conseguir se conectar a serviços que se ligam diretamente ao host local. Você precisará certificar-se de que seus serviços estão ouvindo conexões no IP da ponte do Docker, bem como localhost e 127.0.0.1. Caso contrário, você verá conexão recusada ou erros semelhantes em seu contêiner.

Resumo

Você tem várias opções quando precisa acessar fora de um contêiner do Docker para o host local da sua máquina. Se você estiver no Windows ou Mac, é melhor usar o alias host. docker. internal integrado. Os usuários do Linux podem configurar algo semelhante com a sinalização –add-host ao iniciar um contêiner.

O modo de rede do host é uma alternativa universal que permite que os contêineres compartilhem a pilha de rede do seu host. Você pode consultar o localhost diretamente, mas precisa estar ciente dos riscos e limitações. Não é uma opção adequada quando é necessário um forte isolamento de rede.

Publicidade

Ficar com o modo bridge pode ser a melhor opção para cargas de trabalho que o suportam. Vincule os serviços do seu host ao IP do Docker e use esse endereço para se conectar a partir do seu contêiner. Isso permite que você use a rede virtualizada por contêiner do Docker enquanto fornece uma rota para o seu host quando for necessário.

Related Posts

Leave a Comment