
Eu tenho uma imagem docker em execução em multipass em um host físico. O contêiner docker está tentando se conectar a um serviço em execução no host físico. No entanto, a resolução do DNS informa ao docker que o endereço IP é 127.0.1.1
. Acho que a pesquisa de DNS na VM está retornando um endereço IP local, quando um endereço público é necessário:
physical host: culsu (ubuntu 18.04)
multipass host: promlife (ip: 10.13.31.13) (ubuntu 22.04)
docker container: prometheus (ip: 172.18.0.9)
dns lookup of promlife: 127.0.1.1
Acho que o problema pode ser resolvido se o servidor DNS promlife
retornar10.13.31.13
Da máquina física:
$ ping promlife
PING promLife (10.13.31.13) 56(84) bytes of data.
Do baile de formatura vm:
$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.
No contêiner do docker:
$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.
Alguém tem alguma opinião sobre o que preciso mudar para que o prometheus resolva o host virtual?
O problema está potencialmente relacionado ao systemd-resolvd?
Obrigado pela ajuda!
Responder1
O endereço 127.0.1.1 é o endereço dos hosts Linux configurados como o endereço para "ele mesmo por nome" em /etc/hosts
. Quando você executa ping
(ou qualquer outra coisa que use resolução de nomes POSIX), ele usará a nsswitch
biblioteca para examinar o /etc/hosts
arquivo e encontrar o significado do nome não totalmente qualificado.
Não sei por que isso acontece de dentro do contêiner - de alguma forma, ele descarrega para a nsswitch
biblioteca host, talvez seja uma coisa do Docker.
De qualquer forma, se você deseja acessar o host Docker de dentro de um contêiner docker, a maneira correta é usar um nome de host especial que o docker resolva automaticamente para o endereço IP do host docker na rede local do contêiner - que é chamado host.docker.internal
.
Experimente: ping host.docker.internal
de dentro do seu contêiner.
Responder2
Você precisa atualizar a configuração do DNS emvida de baile, você pode editar o arquivo /etc/netplan/netcfg.yaml. Modifique oservidores de nomescampo para apontar para o seu servidor DNS preferido.
network:
version: 2
ethernets:
ens:
addresses: [10.13.31.13/24] # Your IP configuration
gateway4: 10.13.31.1 # Your gateway
nameservers:
addresses: [8.8.8.8]
Após atualizar a configuração, aplique-a.
sudo netplan apply
Reinicie oresolvido pelo systemdserviço para garantir que ele receba as alterações.
sudo systemctl restart systemd-resolved