Ubuntu-VM gibt interne IP an Docker-Image zurück

Ubuntu-VM gibt interne IP an Docker-Image zurück

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 promlifezurü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 nsswitchBibliothek verwendet, um in der /etc/hostsDatei 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- nsswitchBibliothek 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.internalaus 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

verwandte Informationen