Gall pecyn preifat sy’n datrys yn iawn ar eich peiriant fethu gyda gwall 404 neu derfyn amser y tu mewn i’r build, ac anaml y Dockerfile yw’r rheswm. Mae cam y build yn rhedeg mewn namespace rhwydwaith gwahanol, gyda golwg DNS wahanol a storfa dystysgrifau wahanol i’r gragen y gwnaethoch brofi ynddi. Ewch drwy’r gwiriadau hyn yn eu trefn a stopiwch yn y cyntaf sy’n methu, oherwydd mae pob gwiriad diweddarach yn tybio bod yr un blaenorol wedi pasio. Mae pob cam yn enwi’r gorchymyn sy’n setlo’r mater.

Dechreuwch trwy enwi’r adeiladydd, nid y Dockerfile

Gall BuildKit fod yn lleol, mewn cynhwysydd neu ar beiriant arall, ac mae gan bob un ei rwydwaith diofyn ei hun. Rhedwch docker buildx ls a darllenwch y nod sydd â seren wrtho cyn newid unrhyw beth. Nid yw gyrrwr docker-container na builder cwmwl yn rhannu’r llwybr preifat ar eich gliniadur dim ond oherwydd i chi deipio’r gorchymyn yno. Os yw’r adeiladydd gweithredol yn bell, rhaid i bob gwiriad sy’n weddill redeg yn erbyn y gwesteiwr hwnnw yn lle eich gorsaf waith.

Mae gan yr adeiladydd hefyd ei ffurfwedd datryswr a newidynnau procsiei hun. Darllenir y ddau adeg y build ac ni chânt eu hetifeddu o’r derfynell a gychwynnodd y build.

Profwch y llwybr rhwydwaith o fewn cam build

Ysgrifennwch gam taflu-i-ffwrdd sy’n datrys gwesteiwr y ddibyniaeth ac yn agor cysylltiad ag ef. Dyma’r unig brawf sy’n ateb y cwestiwn dros yr adeiladydd yn lle dros eich cragen.

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/

Adeiladwch y ffeil honno gyda’r un adeiladydd, modd rhwydwaith a gosodiadau secret ag y mae eich build go iawn yn eu defnyddio: docker buildx build --builder remote0 -f Dockerfile.probe --progress=plain .. Os nad yw getent yn argraffu dim, y nam yw datrys enwau ac ni fydd unrhyw dystysgrif yn ei drwsio. Os yw’r enw’n datrys ond mae curl yn adrodd terfyn amser, y rhwystr yw’r llwybr neu’r polisi allanfa o flaen y gofrestrfa.

Dilewch y prawf unwaith y bydd yn ateb. Cam diagnostig yw e, ac ni ddylid byth ei dagio na’i wthio.

Gosodwch y dystysgrif yn lle ei chopïo

Unwaith y bydd y llwybr yn gweithio, dilysu yw’r methiant nesaf yn y rhes. Mae gosodiad secret BuildKit yn datgelu ffeil i un RUN cam heb ei hysgrifennu i haen, sef yr hyn y mae’r offeryn dibyniaeth ei angen a’r hyn na ddylai’r image ei gadw.

RUN --mount=type=secret,id=npmrc,target=/root/.npmrc     npm ci --omit=dev

Rhaid darparu’r secret o du allan i’r Dockerfile: docker buildx build --secret id=npmrc,src=/home/me/.npmrc .. Mae’r ffeil yn aros ar y cleient ac ni ddaw byth i hanes yr image. Nid yw ARG na ENV sy’n dal yr un token yn gwneud y gwaith hwn, oherwydd cofnodir y ddau yng nghyfluniad yr image.

Mae angen ei lwybr targed ei hun ar image nad yw’n root, megis /home/app/.npmrc neu’r ffeil gyfatebol ar gyfer pip, Maven neu Cargo. Rhaid i darged y gosodiad gyd-fynd â’r defnyddiwr sy’n rhedeg y gorchymyn, neu bydd yr offeryn yn adrodd ffeil gyfluniad ar goll sydd mewn gwirionedd yno.

Archwiliwch beth mae’r offeryn dibyniaeth yn ei adael yn yr image

Mae gosodiad dros dro yn cadw’r dystysgrif allan o haen, ond nid yw’n atal yr offeryn rhag ysgrifennu rhywbeth arall. Mae rheolwyr pecynnau yn gadael ffeiliau clo, cyfeiriaduron cache ac weithiau’r URL cofrestrfa a ddatryswyd ar ôl.

Darllenwch y ffeilsystem orffenedig yn lle trystio’r Dockerfile. docker history --no-trunc image:tag yn rhestru pob gorchymyn haen, a docker run --rm image:tag sh -c "ls -a /root" yn dangos beth a oroesodd i’r cynhwysydd sy’n rhedeg. Hyd yn oed pan nad oedd y ffeil ond wedi’i gosod, mae token a ysgrifennwyd mewn llinell log yn ystod npm ci yn dal yn golled.

Darllenwch y log build hefyd, oherwydd --progress=plain yn argraffu allbwn gorchmynion yn llythrennol. Os yw’r token yn ymddangos yno, cylchdroëwch ef cyn unrhyw beth arall a’i basio drwy ffeil y mae’r offeryn yn ei darllen yn dawel.

Gwiriwch nad oes angen y llwybr preifat ar yr image rhedeg mwyach

Mae’r build a’r ap sy’n rhedeg yn ddau ddefnyddiwr gwahanol o’r un ddibyniaeth, a dim ond yr un cyntaf sydd angen y llwybr preifat. Dylai image gorffenedig gychwyn, datrys ei ddibyniaethau rhedeg a gwasanaethu traffig heb y dystysgrif build.

Profwch ef lle nad yw’r gofrestrfa breifat yn cyrraedd, neu gychwynnwch y cynhwysydd gyda --network none a chadarnhau ei fod yn cychwyn heb y secret sydd wedi’i osod. Mae cynhwysydd sy’n cychwyn dim ond pan fydd secret y build yn bresennol yn dal yn gysylltiedig â’r amgylchedd build.

Os oes gwir angen y gofrestrfa ar y cynhwysydd adeg rhedeg, mae hynny’n benderfyniad mynediad ar wahân, ac mae’n perthyn i storfa secret yr orkestradur yn hytrach na’r build. Dogfennwch y ddau lwybr ar wahân fel na fydd neb yn ceisio trwsio tynnu adeg rhedeg â fflag build. Pan fydd y pum gwiriad i gyd yn pasio, mae gan y symptom gwreiddiol achos enw ar bob haen yn lle dyfalu am rwydwaith Docker.

Erthyglau cysylltiedig