Pam mae cynwysyddion Docker yn anwybyddu datryswr DNS y VPN
Mae cynhwysydd yn copïo datryswr y gwesteiwr pan fydd yn cychwyn, felly mae VPN sy’n ailysgrifennu DNS yn ddiweddarach yn aros yn anweladwy y tu mewn iddo. Trosglwyddwch y datryswr yn benodol.
Mae’r VPN ymlaen, mae’r porwr yn cyrraedd safleoedd mewnol, ac mae’r cynhwysydd yn dal i fethu datrys yr un enwau. Mae gosod pecyn yn marw gyda gwall datrys enw fel EAI_AGAIN, neu mae rhaglen yn methu dod o hyd i westeiwr cronfa ddata y mae’r peiriant gwesteiwr yn ei ddatrys heb unrhyw gŵyn. Nid yw’r cynhwysydd yn defnyddio’r datryswr a osododd y VPN. Copïodd Docker gynllun datryswr y gwesteiwr pan grewyd y cynhwysydd, ac ni chafodd ei chopïo eto ar ôl hynny.
Dau olygfa o’r datryswr ar un peiriant
Ar Linux, mae Docker yn rhoi copi o gynllun datryswr y gwesteiwr i bob cynhwysydd ar adeg ei greu, yn hidlo cyfeiriadau loopback, ac yn rhedeg gweinydd DNS mewnol yn 127.0.0.11 sy’n anfon ymholiadau allan. Nid yw cleient VPN sy’n ailysgrifennu /etc/resolv.conf ar ôl i’r cynhwysydd gychwyn yn newid unrhyw beth y tu mewn iddo. Dim ond os yw datryswr y gwesteiwr yn digwydd bod yn gywir ar y foment honno y mae ailgychwyn y cynhwysydd yn helpu.
Mae Docker Desktop ar macOS neu Windows yn ychwanegu haen, oherwydd bod y daemon yn byw mewn peiriant rhithwir. Efallai na fydd datryswr VPN y gwesteiwr byth yn weladwy i’r VM hwnnw, felly nid yw ailgychwyn yn newid dim o gwbl. Cymharwch y ddwy olygfa cyn dewis ateb: docker exec mycontainer cat /etc/resolv.conf wrth ymyl rhestr datryswyr y gwesteiwr.
Bydd cynhwysydd sy’n rhestru datryswr cyhoeddus tra bo’r gwesteiwr yn rhestru un mewnol yn datrys enwau cyhoeddus ac yn methu’r rhai mewnol. Yr hollt honno yw llofnod y broblem hon.
Opsiwn A: trosglwyddo datryswr y tiwnel fesul cynhwysydd
Mae Docker yn derbyn gosodiadau DNS fesul cynhwysydd, a dyna’r newid lleiaf sy’n gweithio. Darllenwch gyfeiriadau datryswr y VPN yn gyntaf: scutil --dns ar macOS, resolvectl status neu allbwn statws y cleient ei hun ar Linux. Yna cychwynnwch y cynhwysydd gyda nhw, er enghraifft docker run --dns 192.168.2.1 --dns 192.168.123.1 myimage. Yn Compose mae’r un gosodiad yn rhestr o dan y gwasanaeth, lle mae’n byw mewn rheolaeth fersiynau yn lle hanes cragen rhywun.
Mae arae dns yn /etc/docker/daemon.json yn berthnasol i bob cynhwysydd newydd, sy’n swnio’n daclusach ac nid yw. Mae hefyd yn berthnasol pan fydd y tiwnel i lawr, ac yna mae datryswr y gellir ei gyrraedd dim ond drwy’r VPN yn torri tynnu delweddau arferol. Mae gosodiadau fesul cynhwysydd yn haws eu rhesymu ac yn haws eu dadwneud.
Opsiwn B: gadael i’r cynhwysydd rannu rhwydwaith y gwesteiwr
Mae rhwydweithio gwesteiwr yn osgoi’r copi’n gyfan gwbl, oherwydd bod y cynhwysydd yn defnyddio datryswr y gwesteiwr a thiwnel y gwesteiwr. Mae hefyd yn tynnu’r ynysu rhwydwaith yr oeddech yn ôl pob tebyg yn ei eisiau, ac nid yw’n ymddwyn yr un ffordd o dan Docker Desktop. Ar Linux dyma’r dewis pragmatig ar gyfer offeryn un-tro sy’n gorfod datrys enwau mewnol.
Ar gyfer adeileddau nid yw’r naill opsiwn na’r llall yn berthnasol, gan nad yw camau adeiladu yn etifeddu baneri amser rhedeg. Adeiladwch gyda rhwydweithio gwesteiwr lle mae’r platfform yn caniatáu, neu cadwch osod dibyniaethau mewn cam nad oes angen y tiwnel arno.
Yr hyn nad yw’r naill opsiwn na’r llall yn ei drwsio
Mae cyfeiriad DNS yn ddiwerth os nad oes gan y cynhwysydd lwybr iddo. Mae datryswr y VPN fel arfer yn eistedd y tu mewn i ofod cyfeiriadau’r tiwnel, felly mae angen llwybr i’r rhagddodiad hwnnw ar y cynhwysydd. Mae pont ragosodedig Docker fel arfer yn llwybro allan drwy’r gwesteiwr, sy’n ddigon pan fydd gan y gwesteiwr lwybr y tiwnel ac mae anfon ymlaen wedi’i alluogi. Gall rhwydweithiau pont cyfaddas â’u cronfeydd cyfeiriadau eu hunain wrthdaro â isrwyd y VPN, ac yna mae ymholiadau’n mynd i rywle hollol arall.
Gwiriwch isrwyd rhwydwaith Docker yn erbyn isrwyd y VPN cyn datfygio’r datryswr ei hun. Mae gorgyffwrdd yn cynhyrchu methiant sy’n edrych yn union fel gweinydd DNS wedi torri.
Gwirio y tu mewn i’r cynhwysydd
Profwch gyda getent hosts db.internal y tu mewn i’r cynhwysydd yn hytrach nag â phorwr neu amgylchedd rhedeg iaith, oherwydd bod y rheini’n gweithredu eu polisi DNS eu hunain a’u cache eu hunain. Os yw getent yn datrys yr enw ac mae’r rhaglen yn dal i fethu, mae’r datryswr bellach yn gywir a’r broblem sy’n weddill ar lefel y rhaglen. Os nad yw’n datrys, nid yw’r cam DNS wedi gorffen.
Ail-greu’r cynhwysydd ar ôl newid ei osodiadau DNS. Mae golygu /etc/resolv.conf y tu mewn i gynhwysydd sy’n rhedeg yn diflannu gydag ef ac yn cuddio’r broblem gyflun am yn union gyhyd ag y mae’n ei gymryd i rywun ei ailgychwyn.