Il-build ta’ Docker ma jasalx għal dipendenza privata: iċċekkja dan
Pakket privat li l-host jista’ jġib xorta jista’ jfalli ġewwa l-build. Semmi l-builder, ipprova r-rotta, imbagħad immonta t-token bħala build secret.
Pakket privat li fuq il-magna tiegħek jiġi riżolt mingħajr problemi jista’ jfalli ġewwa l-build b’404 jew b’timeout, u d-Dockerfile rari jkun ir-raġuni. Il-pass tal-build jaħdem fi spazju tal-isem tan-netwerk differenti, b’veduta tad-DNS differenti u maħżen tal-kredenzjali differenti mill-shell li fiha ttestjajt. Agħżel dawn il-verifiki fl-ordni u waqaf fl-ewwel waħda li tfalli, għax kull verifika sussegwenti tassumi li dik ta’ qabel għaddiet. Kull pass isemmi l-kmand li jissolva l-kwistjoni.
Ibda billi ssemmi l-builder, mhux id-Dockerfile
BuildKit jista’ jkun lokali, f’kontenitur jew fuq magna oħra, u kull wieħed għandu n-netwerk prestabbilit tiegħu. Mexxi docker buildx ls u aqra n-nodu mmarkat bl-asterisk qabel ma tbiddel xejn. Wieħed docker-container driver jew builder fil-cloud ma jaqsamx ir-rotta privata fuq il-laptop tiegħek biss għax iktebt il-kmand hemm. Jekk il-builder attiv huwa remot, kull verifika li tibqa’ trid issir fuq dak il-host u mhux fuq il-workstation tiegħek.
Il-builder iġorr ukoll il- konfigurazzjoni tar-resolver u l-varjabbli tal-proxytiegħu stess. It-tnejn jinqraw fil-ħin tal-build u ma jiġux ereditati mit-terminal li beda l-build.
Ipprova r-rotta tan-netwerk minn ġewwa pass tal-build
Ikteb stadju ta’ darba li jirriżolvi l-host tad-dipendenza u jiftaħ konnessjoni miegħu. Din hija l-unika prova li twieġeb il-mistoqsija għall-builder u mhux għall-shell tiegħek.
FROM alpine:3.20
RUN apk add --no-cache curl bind-tools && getent hosts registry.example.internal && curl -sS -o /dev/null -w "%{http_code}
" https://registry.example.internal/simple/
Ibni dak il-fajl bl-istess builder, mod tan-netwerk u l-istess immuntar ta’ sigrieti li juża l-build reali tiegħek: docker buildx build --builder remote0 -f Dockerfile.probe --progress=plain .. Jekk getent ma jipprintjax xejn, il-ħsara hija fir-riżoluzzjoni tal-ismijiet u l-ebda kredenzjali ma ssewwiha. Jekk l-isem jiġi riżolt imma curl jirrapporta timeout, l-ostaklu huwa r-rotta jew il-politika tal-ħruġ quddiem ir-reġistru.
Ħassar il-probe malli twieġeb. Stadju dijanjostiku huwa u m’għandux qatt jiġi ttikkettat jew imbuttat.
Immonta l-kredenzjali minflok ma tikkupjaha
Ladarba r-rotta taħdem, l-awtentikazzjoni hija l-falliment li jmiss fil-linja. Immuntar ta’ sigriet ta’ BuildKit jesponi fajl lil pass RUN wieħed mingħajr ma jiktbu f’saff, u dan huwa dak li għandu bżonn l-għodda tad-dipendenzi u dak li l-image m’għandux iżomm.
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci --omit=dev
Is-sigriet irid jiġi pprovdut minn barra d-Dockerfile: docker buildx build --secret id=npmrc,src=/home/me/.npmrc .. Il-fajl jibqa’ għand il-klijent u qatt ma jidħol fl-istorja tal-image. Wieħed ARG jew ENV bl-istess token ma jagħmlux dan ix-xogħol, għax it-tnejn jiġu rreġistrati fil-konfigurazzjoni tal-image.
Image mingħajr root għandu bżonn il-mogħdija fil-mira tiegħu stess, bħal /home/app/.npmrc jew il-fajl ekwivalenti għal pip, Maven jew Cargo. Il-mira tal-immuntar trid taqbel mal-utent li jmexxi l-kmand, inkella l-għodda tirrapporta fajl ta’ konfigurazzjoni nieqes li fil-fatt hemm.
Ivverifika x’iħalli l-għodda tad-dipendenzi fl-image
Immuntar temporanju jżomm il-kredenzjali barra mis-saff, imma ma jwaqqafx lill-għodda milli tikteb xi ħaġa oħra. Il-maniġers tal-pakketti jħallu fajls lock, direttorji cache u kultant l-URL tar-reġistru riżolt.
Aqra s-sistema tal-fajls lesta minflok ma tafda d-Dockerfile. docker history --no-trunc image:tag jelenka kull kmand tas-saff, u docker run --rm image:tag sh -c "ls -a /root" juri x’għex fil-kontenitur li qed jaħdem. Anke meta l-fajl ġie mmontat biss, token miktub f’linja tal-log waqt npm ci jibqa’ telf.
Aqra wkoll il-log tal-build, għax --progress=plain jipprintja l-output tal-kmandi kelma b’kelma. Jekk it-token jidher hemm, dawwru qabel kull ħaġa oħra u għaddih minn fajl li l-għodda taqra bil-kwiet.
Ivverifika li l-image tal-ħin tal-eżekuzzjoni m’għadux għandu bżonn il-mogħdija privata
Il-build u l-applikazzjoni li qed taħdem huma tnejn konsumaturi differenti tal-istess dipendenza, u l-mogħdija privata ssir bżonn biss għall-ewwel wieħed. Image lest għandu jibda, jirriżolvi d-dipendenzi tal-ħin tal-eżekuzzjoni tiegħu u jaqdi traffiku bla kredenzjali tal-build.
Ittestjah fejn ir-reġistru privat mhux aċċessibbli, jew sempliċement ibda l-kontenitur b’ --network none u kkonferma li jibda mingħajr is-sigriet immontat. Kontenitur li jibda biss meta s-sigriet tal-build ikun preżenti għadu marbut mal-ambjent tal-build.
Jekk il-kontenitur tassew għandu bżonn ir-reġistru fil-ħin tal-eżekuzzjoni, dik hija deċiżjoni tal-aċċess separata, u l-post tagħha huwa l-maħżen tas-sigrieti tal-orkestratratur u mhux il-build. Iddokumenta ż-żewġ mogħdijiet separatament biex ħadd ma jipprova jsewwi pull tal-ħin tal-eżekuzzjoni b’bandiera tal-build. Meta l-ħames verifiki kollha jgħaddu, is-sintomu oriġinali jkollu kawża msemmija f’kull saff minflok suppożizzjoni dwar in-netwerk ta’ Docker.