Como o docker pode se comunicar com outros hosts na rede local usando nomes de host?

Como o docker pode se comunicar com outros hosts na rede local usando nomes de host?

Eu tenho dois computadores na mesma rede com nomes de host e endereços IP abaixo (IPs dinâmicos):

host1.local - 10.0.0.11
host2.local - 10.0.0.12

host1está executando o Docker com configuração padrão.

Os contêineres host1podem se conectar host2usando o endereço IP 10.0.0.12, mas não conseguem se conectar host2usando o nome do host host2.local. Alguém pode me informar como os contêineres podem se conectar diretamente ao hosts2uso de nomes de host. Observe que ambos os servidores host1, host2estão no servidor DHCP e não possuem endereço IP fixo, portanto, configure o arquivo/etc/hostsnão funciona no meu caso.

Responder1

Os contêineres Docker geralmente estão norede de ponte padrão:

Quando você inicia o Docker, uma rede de ponte padrão (também chamada de ponte) é criada automaticamente e os contêineres recém-iniciados se conectam a ela, a menos que seja especificado de outra forma.

Você também pode ter pontes definidas pelo usuário com seu próprio serviço DNS:

As pontes definidas pelo usuário fornecem resolução automática de DNS entre contêineres.

Em uma rede de ponte definida pelo usuário, os contêineres podem resolver uns aos outros por nome ou alias.

Existem opções adicionais para configurar a resolução DNS em um contêiner (consulteaqui):

Por padrão, um contêiner herda as configurações de DNS do host, conforme definido no /etc/resolv.confarquivo de configuração. Os contêineres que usam a rede bridge padrão obtêm uma cópia desse arquivo, enquanto os contêineres que usam uma rede personalizada usam o servidor DNS incorporado do Docker, que encaminha pesquisas de DNS externas para os servidores DNS configurados no host.

Hosts personalizados definidos em /etc/hosts não são herdados. Para passar hosts adicionais para seu contêiner, consulte "adicionar entradas ao arquivo de hosts do contêiner" na documentação de referência do docker run. Você pode substituir essas configurações por contêiner.

Eadicionar entradas ao arquivo hosts do contêinerdiz:

Você pode adicionar outros hosts ao arquivo de um contêiner /etc/hostsusando um ou mais --add-hostsinalizadores. Este exemplo adiciona um endereço estático para um host chamado docker:

$ docker run --add-host=docker:93.184.216.34 --rm -it alpine

É claro que você também pode configurar o servidor DNS upstream para resolver corretamente os arquivos *.local. Se você usar o mDNS para isso, o servidor DNS upstream deverá ser capaz de usá-lo.

informação relacionada