
Ich habe ein Docker-Image, das auf einem physischen Host mit Multipass ausgeführt wird. Der Docker-Container versucht, eine Verbindung zu einem Dienst herzustellen, der auf dem physischen Host ausgeführt wird. Die DNS-Auflösung teilt Docker jedoch mit, dass die IP-Adresse lautet 127.0.1.1
. Ich denke, die DNS-Suche in der VM gibt eine lokale IP-Adresse zurück, obwohl eine öffentliche Adresse erforderlich ist:
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
Ich denke, das Problem kann gelöst werden, wenn der DNS-Server promlife
zurückgibt10.13.31.13
Von der physischen Maschine:
$ ping promlife
PING promLife (10.13.31.13) 56(84) bytes of data.
Aus dem Promlife-VM:
$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.
Aus dem Docker-Container:
$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.
Hat jemand eine Idee, was ich ändern muss, damit Prometheus den virtuellen Host auflöst?
Hängt das Problem möglicherweise mit systemd-resolvd zusammen?
Vielen Dank für Ihre Hilfe!
Antwort1
Die Adresse 127.0.1.1 ist die Adresse, die Linux-Hosts als Adresse für „sich selbst nach Namen“ in einrichten /etc/hosts
. Wenn Sie ping
(oder irgendetwas anderes, das POSIX-Namensauflösung verwendet) ausführen, wird die nsswitch
Bibliothek verwendet, um in der /etc/hosts
Datei nach der Bedeutung des nicht vollqualifizierten Namens zu suchen.
Ich bin nicht sicher, warum das innerhalb des Containers geschieht – es wird irgendwie in die Host- nsswitch
Bibliothek ausgelagert, vielleicht ist es eine Docker-Sache.
Wenn Sie jedoch von einem Docker-Container aus auf den Docker-Host zugreifen möchten, verwenden Sie am besten einen speziellen Hostnamen, den Docker automatisch in die IP-Adresse des Docker-Hosts im lokalen Netzwerk des Containers auflöst – dieser heißt host.docker.internal
.
Versuchen Sie: ping host.docker.internal
aus Ihrem Container heraus.
Antwort2
Sie müssen die DNS-Konfiguration aktualisieren inAbschlussballlebenkönnen Sie die Datei /etc/netplan/netcfg.yaml bearbeiten. Ändern Sie dieNameserverFeld, um auf Ihren bevorzugten DNS-Server zu verweisen.
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]
Nachdem Sie die Konfiguration aktualisiert haben, wenden Sie sie an.
sudo netplan apply
Starten Sie densystemd-aufgelöstDienst, um sicherzustellen, dass er die Änderungen übernimmt.
sudo systemctl restart systemd-resolved