Einkapakki sem leysist án vandræða á vélinni þinni getur klikkað inni í buildinu með 404 eða tímamörkum, og Dockerfile er sjaldan orsökin. Build-skrefið keyrir í öðru netnafnsrými, með aðra DNS-sýn og annað geymslupláss skírteina en skelin sem þú prófaðir í. Farðu í gegnum þessar athuganir í röð og stoppaðu við þá fyrstu sem klikkar, því hver síðari athugun gerir ráð fyrir að sú fyrri hafi staðist. Hvert skref nefnir skipunina sem ræður úrslitum.

Byrjaðu á að nefna builderinn, ekki Dockerfile

BuildKit getur verið staðbundið, í gám eða á annarri vél, og hvert þeirra hefur sitt sjálfgefna net. Keyrðu docker buildx ls og lestu hnútinn sem er merktur með stjörnu áður en þú breytir nokkru. Einn docker-container ökumaður eða skýjabuilder deilir ekki einkaleiðinni á fartölvunni þinni bara af því að þú skrifaðir skipunina þar. Ef virki builderinn er fjarlægur verður hver eftirstandandi athugun að keyra á móti þeim hýsli, ekki vinnustöðinni þinni.

Builderinn ber líka sína eigin uppsetningu resolver og proxy-breytur. Bæði eru lesin við build og er ekki erft frá flugstöðinni sem ræsti buildið.

Sannaðu netleiðina innan frá build-skrefi

Skrifaðu einskiptisstig sem leysir hýsil aðhengisins og opnar tengingu við hann. Þetta er eina prófið sem svarar spurningunni fyrir builderinn en ekki fyrir skelina þína.

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/

Byggðu þá skrá með sama builder, netstillingu og sömu leyndarmálsfestingu og raunverulega buildið þitt notar: docker buildx build --builder remote0 -f Dockerfile.probe --progress=plain .. Ef getent prentar ekkert, er bilunin í nafnleysingu og engin skírteini laga það. Ef nafnið leysist en curl tilkynnir tímamörk, er hindrunin leiðin eða útstreymisstefnan fyrir framan skrána.

Eyddu prófunartækinu um leið og það svarar. Það er greiningarstig og ætti aldrei að merkja það eða ýta.

Festu skírteinið í stað þess að afrita það

Þegar leiðin virkar er auðkenning næsta bilun í röðinni. Leyndarmálsfesting BuildKit gefur einu RUN skrefi skrá án þess að skrifa hana í lag, það er það sem aðhengistólið þarf og það sem ímyndin má ekki geyma.

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

Leyndarmálið verður að koma frá utanverðu Dockerfile: docker buildx build --secret id=npmrc,src=/home/me/.npmrc .. Skráin verður eftir hjá biðlaranum og fer aldrei í ímyndarsöguna. Eitt ARG eða ENV með sama tákni gegnir ekki þessu hlutverki, því bæði eru skráð í uppsetningu ímyndarinnar.

Ímynd án root þarf sína eigin markleið, til dæmis /home/app/.npmrc eða samsvarandi skrá fyrir pip, Maven eða Cargo. Markmið festingarinnar verður að passa við notandann sem keyrir skipunina, annars tilkynnir tólið vantaða uppsetningarskrá sem er reyndar til staðar.

Skoðaðu hvað aðhengistólið skilur eftir í ímyndinni

Tímabundin festing heldur skírteininu utan lags, en kemur ekki í veg fyrir að tólið skrifi eitthvað annað. Pakkastjórar skilja eftir lock-skrám, skyndiminnismöppum og stundum leystri slóð skrárinnar.

Lestu fullbúið skráarkerfið í stað þess að treysta Dockerfile. docker history --no-trunc image:tag telur upp hverja lagskipun, og docker run --rm image:tag sh -c "ls -a /root" sýnir hvað komst í gám sem er í gangi. Jafnvel þegar skráin var aðeins fest, er tákn sem skrifað er í log-línu meðan npm ci á sér stað enn leki.

Lestu líka build-logginn, því --progress=plain prentar útkomu skipana orðrétt. Ef táknið birtist þar skaltu snúa því áður en nokkuð annað er gert og senda það í gegnum skrá sem tólið les hljóðlega.

Staðfestu að keyrsluímyndin þarfnist ekki lengur einkaleiðarinnar

Buildið og forritið sem er í gangi eru tveir ólíkir notendur sama aðhengis, og aðeins sá fyrri þarfnast einkaleiðarinnar. Fullbúin ímynd ætti að ræsast, leysa keyrsluaðhengi sín og þjóna umferð án skírteinis buildsins.

Prófaðu það þar sem einkaskráin er óaðgengileg, eða ræstu gáminn einfaldlega með --network none og staðfestu að hann ræsist án hins festa leyndarmáls. Gámur sem ræsist aðeins þegar build-leyndarmálið er til staðar er enn tengdur build-umhverfinu.

Ef gámurinn þarfnast skrárinnar sannarlega við keyrslu er það sérstök aðgangsákvörðun, og hún á heima í leyndarmálageymslu hljómsveitarstjórans en ekki í buildinu. Skjalfestu leiðirnar tvær aðskildar svo enginn reyni að laga keyrslusókn með build-fána. Þegar allar fimm athuganirnar standast hefur upphaflega einkennið nefnda orsök á hverju lagi í stað ágiskunar um Docker-net.

Tengdir greinar