It VPN is oan, de browser berikt interne siden, en de kontener kin deselde nammen noch altyd net oplosse. In pakketynstallaasje stjert mei in namme-oplossingsflater lykas EAI_AGAIN, of in applikaasje fynt gjin databankhost dy't de hostmasine sûnder klacht oplost. De kontener brûkt de resolver net dy't it VPN ynstallearre hat. Docker kopiearre de resolverkonfiguraasje fan de host doe't de kontener makke waard, en dêrnei hat neat it wer kopiearre.

Twa resolver-útsichten op ien masine

Op Linux jout Docker elke kontener in kopy fan de resolverkonfiguraasje fan de host op it stuit fan it meitsjen, filteret loopback-adressen út en rint in ynboude DNS-tsjinner op 127.0.0.11 dy't fragen nei bûten trochstjoert. In VPN-klant dy't /etc/resolv.conf oerskriuwt neidat de kontener start is, feroaret dêr neat oan. De kontener opnij starte helpt allinnich as de hostresolver op dat stuit tafallich goed is.

Docker Desktop op macOS of Windows foeget in laach ta, om't de daemon yn in firtuele masine libbet. De VPN-resolver fan de host is miskien nea sichtber foar dy VM, dat opnij starten feroaret hielendal neat. Ferlykje de twa útsichten foardat jo in oplossing kieze: docker exec mycontainer cat /etc/resolv.conf njonken de resolverlist fan de host.

In kontener dy't in publike resolver listet wylst de host in ynterne listet, sil publike nammen oplosse en op ynterne misse. Dy splitsing is it kenmerk fan dit probleem.

Opsje A: jou de tunnelresolver per kontener troch

Docker akseptearret DNS-ynstellingen per kontener, en dat is de lytste feroaring dy't wurket. Lês earst de resolveradressen fan it VPN: scutil --dns op macOS, resolvectl status of de eigen statusútfier fan 'e klant op Linux. Start de kontener dan dêrmei, bygelyks docker run --dns 192.168.2.1 --dns 192.168.123.1 myimage. Yn Compose is deselde ynstelling in list ûnder de tsjinst, dêr't it yn ferzje-kontrôle libbet ynstee fan yn immen syn shellskiednis.

In dns-array yn /etc/docker/daemon.json jildt foar elke nije kontener, wat oarderliker klinkt en it net is. It jildt ek as de tunnel del is, en in resolver dy't allinnich fia it VPN berikber is, brekt dan gewoane ôfbyldingsdownloads. Ynstellingen per kontener binne makliker te bepraten en makliker werom te draaien.

Opsje B: lit de kontener it hostnetwurk diele

Hostnetwurk giet de kopy hielendal foarby, om't de kontener de resolver fan de host en de tunnel fan de host brûkt. It hellet ek de netwurkisolaasje fuort dy't jo wierskynlik woene, en it gedraacht him net itselde ûnder Docker Desktop. Op Linux is it de pragmatyske kar foar in ienmalich ark dat ynterne nammen oplosse moat.

Foar builds jildt gjin fan beide opsjes, om't buildstappen gjin runtime-flaggen ervje. Bou mei hostnetwurk dêr't it platfoarm it tasteat, of hâld ôfhinklikheidsynstallaasje yn in stap dy't de tunnel net nedich hat.

Wat gjin fan beide opsjes reparearret

In DNS-adres is nutteleas as de kontener gjin rûte dêrhinge hat. De VPN-resolver sit meastentiids binnen de adresromte fan de tunnel, dat de kontener hat in paad nei dat foarheaksel nedich. De standertbrêge fan Docker rûttet normaal fia de host nei bûten, en dat is genôch as de host de tunnelrûte hat en trochstjoeren oan is. Oanpaste brêgenetwurken mei eigen adrespools kinne botskje mei it VPN-subnet, en dan geane fragen hielendal earne oars hinne.

Kontrolearje it subnet fan it Dockernetwurk tsjin it subnet fan it VPN foardat jo de resolver sels debugge. Oerlap jout in flat dy't der krekt as in stikken DNS-tsjinner útsjocht.

Ferifiearje yn 'e kontener

Test mei getent hosts db.internal yn 'e kontener ynstee fan mei in browser of in taal-runtime, om't dy har eigen DNS-belied en har eigen cache tapasse. As getent de namme oplost en de applikaasje noch altyd misse, is de resolver no goed en is it oerbleaune probleem op applikaasjenivo. As it net oplost, is de DNS-stap net klear.

Meitsje de kontener opnij nei't jo syn DNS-ynstellingen feroare hawwe. It bewurkjen fan /etc/resolv.conf yn in rinnende kontener ferdwynt mei him en ferberget it konfiguraasjeprobleem krekt sa lang as it immen kostet om him opnij te starten.

Relatearre artikelen