Docker kann keine Hosts auflösen, für die mehrere Nameserver erforderlich sind

748
SergeyOvchinnik

Ich betreibe einen Docker-Container, der einige Git-Repositories klont und ein Projekt in sich selbst erstellt.

Es klont den Code aus zwei verschiedenen Repositorys: Eines ist öffentlich github.comund das andere ist privat my.companys.github.enterprise.netund nur über VPN zugänglich.

In meinem habe resolv.confich 2 Nameserver: einen für öffentliche Dienste und einen für VPN:

nameserver 8.8.8.8 nameserver 10.10.3.3 

Wenn ich versuche, Repositorys in meinem Docker-Container zu klonen, können Repositorys nur aufgelöst github.comund Repositorys nicht aufgelöst werden my.companys.github.enterprise.net.

Wenn ich die Zeilen in meinem umschalte resolv.conf, dann kann es nur die lösen my.companys.github.enterprise.netund nicht die github.com.

Gibt es eine Möglichkeit, Docker zu erlauben, beide Links zu Repositorys mit zwei verschiedenen Nameservern aufzulösen, resolv.confanstatt nur den ersten auszuprobieren?

1
Vielleicht können Sie im DNS Ihres Unternehmens einen Forwarder (den Internet-DNS als Forwarder, meine ich) einstellen und an erster Stelle setzen, können Sie alle auflösen. Wenn es nicht möglich ist, den DNS-Server des Unternehmens zu ändern ... nicht sicher, wie das Problem gelöst werden soll. OscarAkaElvis vor 7 Jahren 1
Wenn der erste Nameserver mit ALLE antwortet (auch wenn "Ich weiß nicht, ob Name / Adresse bekannt ist)), wird der nächste nicht überprüft. Der Vorschlag von @OscarAkaElvis ist in seinem Kommentar genau richtig. Ƭᴇcʜιᴇ007 vor 7 Jahren 0

1 Antwort auf die Frage

1
milli

Ihre Verwirrung besteht darin, dass die nameserverEinträge /etc/resolv.confals gleichwertig angesehen werden (dh Spiegel, und die gleichen Antworten geben, unabhängig davon, welche gefragt wird). Wenn ein Nameserver mit "Das gibt es nicht" antwortet, ist der Auflösungscode abgeschlossen, andere Nameserver versuchen nicht, nach einer anderen Antwort zu suchen. Der Resolvercode ist in libc und ist sehr einfach.

Die einfachste Lösung, um dies zu beheben, besteht darin, einen lokalen Nameserver in Docker ( BIND oder ungebundene Pakete) auszuführen, der alle Informationen über den öffentlichen Namensraum und das "alternative Universum" enthält, bei dem es sich um Ihren privaten Namensraum handelt, der normalerweise mithilfe von Forwarding oder konfiguriert wird "Stub" -Zonen. Google ist Ihr Freund, um das einzurichten. Dann haben Sie nur einen nameserverEintrag in /etc/resolv.confdiesem Punkt 127.0.0.1.