Il-Dev Container ma jilħaqx host disponibbli biss permezz tal-VPN: fejn wieħed iħares
Il-brawżer u l-container għandhom kuntesti differenti ta' resolver, proxy u rotot. Skopri liema juża l-proċess li qed ifalli qabel ma tbiddel kwalunkwe setting tal-VPN.
L-API privata tinfetaħ fil-brawżer tad-desktop tiegħek u tfalli fil-container tal-iżvilupp. Din mhix kontradizzjoni, u rari l-VPN innifsu huwa l-kawża. It-talba tal-brawżer u t-talba li tfalli saru minn proċessi differenti, b'resolvers, proxies u rotot differenti, u spiss minn spazji tal-ismijiet tan-netwerk għal kollox differenti. “Fuq il-laptop tiegħi” tista' tfisser il-host Windows, distribuzzjoni WSL, il-magna virtwali ta' Docker Desktop u container ġewwa dik il-VM — erba' kuntesti li kull wieħed minnhom jista' jwieġeb b'mod differenti għall-istess isem tal-host. Skopri liema juża l-proċess li qed ifalli qabel ma tmiss setting wieħed.
Sib il-proċess qabel ma tbiddel setting
Ibda bil-magna tal-containers, mhux bil-klijent tal-VPN. Staqsi liema kuntest qed jitkellem miegħu l-command line, u fuq liema sistema operattiva taħdem dik il-magna, għax container Linux immexxi minn VM tad-desktop jimxi triq differenti minn wieħed immexxi minn daemon lokali:
docker context ls
docker info --format '{{.OperatingSystem}} / {{.Name}}'
docker run --rm alpine ip route
Fuq Windows, wsl -l -v jgħidlek jekk id-distribuzzjoni hix taħdem taħt WSL 2, li jqegħdha wara l-iswiċċ virtwali tagħha stess. Dak id-dettall jiddeċiedi jekk il-container jaqsamx it-tabella tar-rotot tal-host jew joqgħodx wara NAT li jeħtieġ port mgħoddi 'l quddiem jew isem tal-host biex jasal għall-host.
Żomm talba waħda kostanti u qabbel
Agħżel endpoint wieħed mingħajr ħsara fuq il-host privat u użah għal kull paragun: mill-brawżer, mit-terminal tal-host, mid-distribuzzjoni WSL u minn ġewwa l-container. Innota erba' affarijiet għal kull attentat: l-indirizz riżolt, jekk inġiebx użat proxy, il-klassi tal-falliment u l-ħin li għadda. It-tfittxija tal-isem, it-twaqqif tal-konnessjoni, il-validazzjoni TLS u status HTTP huma erba' problemi differenti, u t-taħlit tagħhom f'“ma jaħdimx” jaħli filgħodu.
Mexxi l-paragun ġewwa l-container li qed ifalli, b'timeout sabiex firewall sieket ma jżommx it-terminal għal minuti. Container ġdid jirriproduċi l-kuntest tan-netwerk tal-magna, iżda mhux l-ispazju tal-ismijiet, il-varjabbli tal-proxy jew ir-resolver tal-container tal-applikazzjoni, għalhekk docker exec fil-container veru huwa t-test awtorevoli, u container tal-ġenb huwa biss mod kif tiżola jekk id-differenza hix fil-magna jew fil-container:
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
L-immaġni bażika alpine ġġorr busybox u m'għandhiex curl, u dan huwa eżatt it-tip ta' dettall li jagħmel blokka dijanjostika kkopjata tfalli: agħżel immaġni bil-klijent, jew żidu fl-istess esekuzzjoni. Paragun ma' siti pubbliċi mhux relatati ma jiżola xejn. Jekk https://example.com jaħdem mill-container, tgħallimt li l-container għandu aċċess għall-internet, u xejn dwar jekk jilħaqx indirizz privat permezz tat-tunnel. Bl-istess mod, il-ftuħ ta' terminal ġdid jipprova biss li t-terminal ġdid jaħdem, mhux li jaqsam runtime mal-applikazzjoni li fallew.
Docker Desktop jista' jaħdem ma' VPN
Id-dokumentazzjoni ta' Docker stess dwar il-VPN u l-konnettività mal-host tiddeskrivi dan bħala setup appoġġjat, u s-sommarja onesta hija li jaħdem minflok ma jkun miksur awtomatikament. Tassumix li l-VM tad-desktop tgħaddi minn mal-tunnel tal-host bħala kwistjoni ta' disinn; f'ħafna setups it-traffiku jsegwi t-tunnel tal-host b'mod korrett, u għalhekk il-leġġenda “Docker jinjora l-VPN” tipproduċi pariri kunfidenti u żbaljati.
Dak li għadu importanti huwa l-backend użat, il-politika ta' split-tunnel tal-klijent u l-konfigurazzjoni tar-resolver li rċeviet il-VM. Klijent VPN li jinstalla rotot iżda mhux DNS, jew li jimbotta server DNS li l-VM ma tistax tilħaq, jipproduċi falliment fit-tfittxija tal-isem ġewwa l-container filwaqt li l-host jaħdem għax għandu resolver addizzjonali jew tweġiba fil-cache. Din hija problema tar-resolver bil-kostum tal-container. Tibqa' ħajja għal kull rikonnessjoni tal-VPN li tipprova, għax it-tunnel diġà qed iġorr it-traffiku li tlabtu jġorr.
L-overlaps tal-indirizzi u l-MTU huma fallimenti differenti
Żewġ fallimenti jixirqilhom dijanjożi tagħhom għax spiss jiġu mifhuma ħażin bħala politika ta' aċċess. L-ewwel huwa overlap tal-indirizzi: jekk il-VPN jimbotta firxa li taħbat mas-subnet tal-pont default ta' netwerk tal-containers, ir-rotta tal-container għal dik il-firxa tindika lejn il-pont lokali u qatt ma tasal għat-tunnel. Spezzjona s-subnets reali minflok ma taħseb:
docker network inspect bridge --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'
ip route get 10.20.30.40
It-tieni hija problema tal-MTU. Jekk il-konnessjoni tistabbilixxi u TLS jitlesta iżda tweġibiet akbar jieqfu, għandek problema tad-daqs tal-pakkett, mhux problema ta' awtorizzazzjoni, u s-sostituzzjoni ta' rekords DNS qatt ma ssewwiha. Ipprova b'talba żgħira u waħda kbira qabel ma tbiddel xi ħaġa, u nnota ż-żewġ riżultati.
Is-soluzzjoni għal overlap hija subnet tal-container differenti jew rotta limitata, magħżula min min għandu l-pjan tal-indirizzi. Is-soluzzjoni għal waqfa tal-MTU hija li tillimita jew tnaqqas l-MTU tat-tunnel jew tal-interface għal valur li jiflaħ it-triq, applikat fil-livell li tikkontrolla.
Il-konfigurazzjoni tal-proxy hija għal kull proċess, mhux għal kull magna
Ġewwa container, localhost isemmi l-kuntest tan-netwerk tal-container stess, għalhekk proxy li jaħdem fuq il-host mhuwiex aċċessibbli hemm b'dak l-isem. Docker Desktop jipprovdi host.docker.internal għall-aċċess għall-host, u fuq Linux żżidu b'mod espliċitu b'--add-host=host.docker.internal:host-gateway. Kif inhu, dak l-isem jagħtik rotta lejn il-host; ma joħloqx servizz tal-proxy u ma jagħtik awtorità li tuża wieħed.
Uża l-indirizz u l-port tal-proxy li huma pprovduti għall-ambjent reali, u iċċekkja min qed jaqrahom. Il-varjabbli esportati f'shell interattiv ma jikkonfigurawx awtomatikament kull estensjoni tal-editur, server tal-lingwa, għodda tal-build u daemon fil-mira. Dak li jgħodd huwa l-proċess li għamel it-talba li fallew, għalhekk spezzjona l-ambjent tiegħu u mhux dak tat-terminal tiegħek.
Fl-aħħar, ħalli t-tiswija tispjega lilha nfisha. Soluzzjoni utli ssemmi l-konfini li kienet ħażina, is-setting li bidlitha u s-sett ta' proċessi li issa taffettwa. Ir-ristart tal-VPN, tal-editur u tal-magna wieħed wara l-ieħor jista' jbiddel is-sintomu, iżda ma jħalli xejn li l-persuna li jmiss tista' tuża.