Mae'r API preifat yn agor yn eich porwr bwrdd gwaith ac yn methu yn y cynhwysydd datblygu. Nid yw hynny'n wrthddywediad, ac anaml y mae'r VPN ei hun yn gyfrifol. Gwnaed cais y porwr a'r cais sy'n methu gan brosesau gwahanol, gyda datryswyr, dirprwyon a llwybrau gwahanol, ac yn aml o ofodau enw rhwydwaith hollol wahanol. Gall “ar fy laptop” olygu'r gwesteiwr Windows, dosbarthiad WSL, peiriant rhithwir Docker Desktop a chynhwysydd y tu mewn i'r VM honno — pedwar cyd-destun y gall pob un ohonynt ateb yr un enw gwesteiwr yn wahanol. Darganfyddwch pa un y mae'r broses sy'n methu yn ei ddefnyddio cyn i chi gyffwrdd ag un gosodiad.

Dewch o hyd i'r broses cyn newid gosodiad

Dechreuwch gyda'r peiriant cynhwysydd yn hytrach na'r cleient VPN. Gofynnwch pa gyd-destun y mae'r llinell orchymyn yn siarad ag ef, a pha system weithredu y mae'r peiriant hwnnw'n rhedeg arni, oherwydd bod cynhwysydd Linux a reolir gan VM bwrdd gwaith ar lwybr gwahanol i un a reolir gan ddaemon lleol:

docker context ls
docker info --format '{{.OperatingSystem}} / {{.Name}}'
docker run --rm alpine ip route

Ar Windows, mae wsl -l -v yn dweud wrthych a yw'r dosbarthiad yn rhedeg o dan WSL 2, sy'n ei roi y tu ôl i'w swits rhithwir ei hun. Mae'r manylyn hwnnw'n penderfynu a yw'r cynhwysydd yn rhannu tabl llwybro'r gwesteiwr neu'n eistedd y tu ôl i NAT sydd angen porth a anfonir ymlaen neu enw gwesteiwr i gyrraedd y gwesteiwr.

Cadwch un cais yn gyson a chymharwch

Dewiswch un pwynt terfyn di niwed ar y gwesteiwr preifat a'i ddefnyddio ar gyfer pob cymhariaeth: o'r porwr, o derfynell y gwesteiwr, o'r dosbarthiad WSL ac o du mewn i'r cynhwysydd. Cofnodwch bedair peth ar gyfer pob ymgais: y cyfeiriad a ddatryswyd, a ddefnyddiwyd dirprwy, dosbarth y methiant a'r amser a aeth heibio. Mae chwilio enw, sefydlu cysylltiad, dilysu TLS a statws HTTP yn bedwar problem gwahanol, ac mae cymysgu'r rhain yn “nid yw'n gweithio” yn gwastraffu bore.

Rhedwch y gymhariaeth y tu mewn i'r cynhwysydd sy'n methu, gyda therfyn amser fel nad yw mur tân distaw yn dal y derfynell am funudau. Mae cynhwysydd newydd yn atgynhyrchu cyd-destun rhwydwaith y peiriant, ond nid gofod enw, newidynnau dirprwy na datryswr y cynhwysydd cymhwysiad, felly docker exec i mewn i'r un go iawn yw'r prawf awdurdodol, a dim ond ffordd i ynysu a yw'r gwahaniaeth yn y peiriant neu yn y cynhwysydd yw cynhwysydd ochr:

docker exec -it app /bin/sh -c "getent hosts api.internal; curl -v --max-time 8 https://api.internal/ 2>&1 | tail -20"
docker run --rm --network container:app curlimages/curl:latest -sv --max-time 8 https://api.internal/ 2>&1 | tail -20

Mae'r ddelwedd sylfaen alpine yn cario busybox ac nid oes ganddi curl, a dyna'n union y math o fanylyn sy'n gwneud bloc diagnostig wedi'i gopïo yn methu: dewiswch ddelwedd sydd â'r cleient, neu ychwanegwch ef yn yr un rhediad. Nid yw cymhariaeth â safleoedd cyhoeddus di-gysylltiad yn ynysu dim. Os yw https://example.com yn gweithio o'r cynhwysydd, rydych wedi dysgu bod gan y cynhwysydd fynediad i'r rhyngrwyd ac nid dim am a all gyrraedd cyfeiriad preifat trwy'r twnnel. Yr un modd, dim ond profi bod y derfynell newydd yn gweithio y mae agor terfynell newydd, nid ei bod yn rhannu amgylchedd rhedeg â'r cymhwysiad a fethodd.

Gall Docker Desktop weithio gyda VPN

Mae dogfennaeth Docker ei hun ar VPN a chysylltedd gwesteiwr yn disgrifio hyn fel sefyllfa a gefnogir, a'r crynodeb gonest yw ei bod yn gweithio yn hytrach na bod wedi'i thorri'n awtomatig. Peidiwch â chymryd yn ganiataol bod VM y bwrdd gwaith yn osgoi twnnel y gwesteiwr fel mater o ddyluniad; mewn llawer o sefyllfaoedd mae'r traffig yn dilyn twnnel y gwesteiwr yn gywir, a dyna pam mae chwedl “mae Docker yn anwybyddu'r VPN” yn cynhyrchu cyngor hyderus a chywrong.

Yr hyn sy'n dal i fod o bwys yw'r backend a ddefnyddir, polisi twnnel hollt y cleient, a chyfluniad y datryswr a gafodd y VM. Mae cleient VPN sy'n gosod llwybrau ond nid DNS, neu'n gwthio gweinydd DNS na all y VM ei gyrraedd, yn cynhyrchu methiant chwilio enw y tu mewn i'r cynhwysydd tra bod y gwesteiwr yn gweithio oherwydd bod ganddo ddatryswr ychwanegol neu ateb wedi'i storio. Problem datryswr mewn gwisg cynhwysydd yw hon. Mae'n goroesi pob ailgysylltiad VPN a geisiwch, oherwydd bod y twnnel eisoes yn cario'r traffig y gofynnoch iddo ei gario.

Mae gorgyffwrdd cyfeiriadau ac MTU yn fethiannau gwahanol

Mae dau fethiant yn haeddu diagnosis eu hunain oherwydd eu bod yn aml yn cael eu camgymryd am bolisi mynediad. Y cyntaf yw gorgyffwrdd cyfeiriadau: os yw'r VPN yn gwthio amrediad sy'n gwrthdaro â is-rwydwaith bont diofyn rhwydwaith cynhwysydd, mae llwybr y cynhwysydd ar gyfer yr amrediad hwnnw'n pwyntio at y bont leol ac yn byth yn cyrraedd y twnnel. Archwiliwch yr is-rwydweithiau go iawn yn hytrach na dyfalu:

docker network inspect bridge --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'
ip route get 10.20.30.40

Yr ail yw problem MTU. Os yw'r cysylltiad yn sefydlu ac mae TLS yn cwblhau ond mae ymatebion mwy yn aros, mae gennych broblem maint pecyn, nid problem awdurdodi, ac ni fydd disodli cofnodion DNS byth yn ei drwsio. Profwch gyda chais bach ac un mawr cyn newid unrhyw beth, a chofnodwch y ddau ganlyniad.

Y trwsgl am orgyffwrdd yw is-rwydwaith cynhwysydd gwahanol neu lwybr cyfyngedig, a ddewisir gan bwy bynnag sy'n berchen ar y cynllun cyfeiriadau. Y trwsgl am aros MTU yw clampio neu leihau MTU y twnnel neu'r rhyngwyneb i werth sy'n goroesi'r llwybr, wedi'i roi ar y haen a reolwch.

Mae cyfluniad dirprwy fesul proses, nid fesul peiriant

Y tu mewn i gynhwysydd, mae localhost yn enwi cyd-destun rhwydwaith y cynhwysydd hwnnw ei hun, felly nid yw dirprwy sy'n rhedeg ar y gwesteiwr ar gael yno o dan yr enw hwnnw. Mae Docker Desktop yn darparu host.docker.internal ar gyfer mynediad i'r gwesteiwr, ac ar Linux rydych yn ei ychwanegu'n benodol gyda --add-host=host.docker.internal:host-gateway. Naill ffordd neu'r llall, mae'r enw hwnnw'n rhoi llwybr i chi at y gwesteiwr; nid yw'n creu gwasanaeth dirprwy nac yn eich awdurdodi i ddefnyddio un.

Defnyddiwch y cyfeiriad a'r porth dirprwy a ddarperir ar gyfer yr amgylchedd go iawn, a gwiriwch pwy sy'n eu darllen. Nid yw newidynnau a allforir mewn plisgyn rhyngweithiol yn cyflunio pob estyniad golygydd, gweinydd iaith, offeryn adeiladu a daemon cefndir yn awtomatig. Y broses a wnaeth y cais sy'n methu yw'r un sy'n bwysig, felly archwiliwch ei hamgylchedd hi yn hytrach nag amgylchedd eich terfynell.

Yn olaf, gadewch i'r atgyweiriad esbonio ei hun. Mae datrysiad defnyddiol yn enwi'r ffin oedd yn anghywir, y gosodiad a'i newidiodd, a'r set o brosesau y mae bellach yn effeithio arnynt. Gall ailgychwyn y VPN, y golygydd a'r peiriant yn olynol newid y symptom, ond nid yw'n gadael dim y gall y person nesaf ei ddefnyddio.

Erthyglau cysylltiedig