Firwat Docker-Containeren den DNS-Resolver vum VPN ignoréieren
E Container kopéiert de Resolver vum Host beim Start, also bleift e VPN, deen DNS méi spéit ëmschreift, dobannen onsichtbar. Gitt den Resolver ausdrécklech weider.
De VPN ass un, de Browser erreecht intern Säiten, an de Container kann déi selwecht Nimm nach ëmmer net opléisen. Eng Packageinstallatioun stierft mat engem Nummopléisungsfehler wéi EAI_AGAIN, oder eng Applikatioun fënnt keen Datebankhost, deen d'Hostmaschinn ouni eng Beschwerde opléist. De Container benotzt net de Resolver, deen de VPN installéiert huet. Docker huet d'Resolverkonfiguratioun vum Host beim Uleeë vum Container kopéiert, an duerno huet näischt se nach eng Kéier kopéiert.
Zwee Resolver-Vuen op enger Maschinn
Op Linux gëtt Docker all Container beim Uleeën eng Kopie vun der Resolverkonfiguratioun vum Host, filtert Loopback-Adressen eraus a bedreift en agebaute DNS-Server op 127.0.0.11, deen Ufroen no baussen weiderleet. E VPN-Client, deen /etc/resolv.conf ëmschreift, nodeem de Container gestart ass, ännert dobannen näischt. De Container nei starten hëlleft nëmmen, wann de Resolver vum Host deemools zoufälleg richteg ass.
Docker Desktop op macOS oder Windows füügt eng Schicht derbäi, well den Daemon an enger virtueller Maschinn lieft. De VPN-Resolver vum Host ass fir déi VM vläicht ni sichtbar, also ännert en Neistart iwwerhaapt näischt. Vergläicht déi zwou Vuen, ier Dir eng Léisung wielt: docker exec mycontainer cat /etc/resolv.conf nieft der Resolverlëscht vum Host.
E Container, deen e öffentlechen Resolver oplëscht, wärend den Host en internen oplëscht, léist öffentlech Nimm op a fällt bei internen duerch. Dës Deelung ass d'Signatur vun dësem Problem.
Optioun A: den Tunnel-Resolver pro Container weiderginn
Docker akzeptéiert DNS-Astellungen pro Container, an dat ass déi klengst Ännerung, déi funktionnéiert. Liest fir d'éischt d'Resolveradressen vum VPN: scutil --dns op macOS, resolvectl status oder d'Statussausgab vum Client selwer op Linux. Start dann de Container domat, zum Beispill docker run --dns 192.168.2.1 --dns 192.168.123.1 myimage. An Compose ass déiselwecht Astellung eng Lëscht ënner dem Service, wou se an der Versiounskontroll lieft an net an engem senger Shellhistorie.
En dns-Array an /etc/docker/daemon.json gëllt fir all neien Container, wat méi uerdentlech kléngt wéi et ass. En gëllt och, wann den Tunnel erof ass, an dann zerbriecht en Resolver, deen nëmmen iwwer de VPN erreechbar ass, gewéinlech Image-Pulls. Astellungen pro Container si méi einfach ze begrënnen a méi einfach z'erëmzehuelen.
Optioun B: de Container deelt d'Netzwierk vum Host
D'Netzwierk vum Host geet der Kopie komplett aus de Féiss, well de Container de Resolver vum Host an den Tunnel vum Host benotzt. Et hëlt awer och d'Netzwierkisolatioun ewech, déi Dir wuel wollt, an et verhält sech ënner Docker Desktop net gläich. Op Linux ass et déi pragmatesch Wiel fir en Engsaart-Instrument, dat intern Nimm muss opléisen.
Fir Builds gëllt keng vun deenen zwou Optiounen, well Build-Schrëtt keng Laufzäit-Flags ierwen. Baut mat Hostnetzwierk, wou d'Plattform et erlaabt, oder haalt d'Installatioun vun Ofhängegkeeten an enger Etapp, déi den Tunnel net brauch.
Wat keng vun den zwou Optiounen reparéiert
Eng DNS-Adress ass notzlos, wann de Container keng Route dohinner huet. De VPN-Resolver sëtzt normalerweis am Adressraum vum Tunnel, also brauch de Container e Wee zu deem Prefix. D'Standardbréck vun Docker leet normalerweis iwwer den Host no baussen, an dat duet, wann den Host d'Tunnelroute huet an d'Weiderleedung ageschalt ass. Eegen Bréckenetzwierker mat eegenen Adresspools kënnen mam VPN-Subnetz kollidéieren, an dann ginn d'Ufroen ganz soss anzwousch.
Préift den Subnetz vum Dockernetzwierk géint de Subnetz vum VPN, ier Dir de Resolver selwer debugt. Eng Iwwerdeckung produzéiert en Ausfall, deen genee wéi en defekten DNS-Server ausgesäit.
Am Container verifizéieren
Testet mam getent hosts db.internal am Container amplaz mat engem Browser oder enger Sprooch-Laufzäit, well déi hir eegen DNS-Politik an hire eegenen Cache uwenden. Wann getent den Numm opléist an d'Applikatioun awer nach ëmmer feelt, ass de Resolver elo richteg an de Rescht vum Problem läit op Applikatiounsniveau. Wann en en net opléist, ass den DNS-Schrëtt net fäerdeg.
Erstellt de Container nei, nodeem Dir seng DNS-Astellungen geännert hutt. D'Ännerung vum /etc/resolv.conf an engem lafenden Container verschwënnt mat him a verstoppt de Konfiguratiounsproblem genee esou laang, wéi een brauch fir en nei ze starten.