Houers wat dadelik met exec format error uitval, wek die verkeerde instink: voeg 'n vermoë by, koppel 'n toestel, wysig die tonnelkonfigurasie. Nie een van dié dinge raak aan die probleem nie. Die kern kon die binêre lêer glad nie uitvoer nie, wat in 'n houer byna altyd beteken die beeld is vir 'n ander SVE-argitektuur as die gasheer gebou. Alles wat jy aan roetes, geloofsbriewe of regte sou verander, gebeur nadat 'n program begin het, en geen program het begin nie.

Die beginboodskap wat soos 'n konfigurasiefout lyk

'n exec-formaatfout kom van die laaier, voordat die toepassing 'n enkele instelling lees. Daarom lewer dit geen konfigurasiewaarskuwings en geen tonnelaanmelding nie, want daar is geen proses wat nog leef om dit te skryf nie. Die fout is ook opvallend vinnig, dikwels voordat enige reël in die houerlog verskyn. Dieselfde kort boodskap verskyn of die binêre lêer vir 'n ander argitektuur, vir 'n ander bedryfstelsel of beskadig is.

Teken die looptydomgewing en argitektuur saam met die presiese beeldverwysing aan, en kyk dan wat daardie verwysing werklik bied. Op Docker Desktop hoort die houerplatform by die Linux-virtuele masjien en nie by die skootrekenaar nie, so die gasheerargitektuur alleen kan mislei. Lees die indeksinskrywings vir hierdie verwysing eerder as die bemarkingsteks op sy tag-bladsy.

Lees die beeldindeks voor die uitvoeropdrag

Wanneer 'n registrasie 'n multi-platform-verwysing publiseer, wys die tag na 'n indeks, en elke inskrywing noem 'n platform met sy eie digest. Ondersoek die verwysing wat jy oorweeg, nie 'n naburige tag nie, en lees die indeks in plaas daarvan om te aanvaar wat dit bevat.

docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4

Die eerste opdrag lys die platforms wat die verwysing publiseer. Die tweede rapporteer die platform van die beeld wat reeds plaaslik teenwoordig is, dit is wat die looptyd sal uitvoer. 'n Verwysing met slegs een inskrywing beteken elke gasheer kry dieselfde binêre lêer, en die tag kan nie 'n masjien help waarvoor dit nooit gebou is nie.

Tags kies 'n variant; hulle skep nie een nie

'n Multi-platform-indeks laat die looptyd 'n passende inskrywing kies, wat werklik gerieflik is en dikwels vir draagbaarheid aangesien word. Die keuse is 'n opsoek, nie 'n vertaling nie: as die variant ontbreek, is daar niks om te kies nie. Dieselfde tag kan dus op twee gashere na twee verskillende binêre lêers lei, en op een gasheer lei dit na niks bruikbaars nie.

Vaspenning per digest verwyder die dubbelsinnigheid, en dit maak ook 'n latere hersiening moontlik, want die digest identifiseer presies die grepe wat getoets is. Hou daardie digest by die ontplooiingsrekord in plaas daarvan om op die tag te vertrou wat toevallig geldig was.

Emulasie is 'n reëling, nie 'n vertaallaag nie

Emulasie via 'n ondersteunde looptyd kan sommige nie-inheemse gebruikersruimtelaste laat loop, so die absolute bewering dat een argitektuur nooit 'n ander se beeld kan loop nie, is verkeerd. Dit is ook nie 'n algemene oplossing nie. Geëmuleerde uitvoering het ander prestasiekenmerke, en 'n triviale proses wat begin, sê niks oor of 'n tonnellaag aanvaarbaar presteer nie.

Docker se multi-platform-gids behandel inheemse bou, kruiskompilasie en emulasie as afsonderlike strategieë, wat die regte manier is om die opsies te lees. Kies een doelbewus, en kwalifiseer die VPN-las daaronder eerder as om ekwivalensie te aanvaar.

Regte los 'n ander probleem op

Om 'n netwerkadministrasie-vermoë toe te ken of 'n TUN-toestel deur te gee, kan nie 'n onversoenbare uitvoerbare lêer laat loop nie. Dit is looptydregte wat 'n lopende proses gebruik; hulle is onsigbaar vir 'n laaier wat die lêer reeds geweier het.

Die omgekeerde is ewe waar. 'n Inheemse binêre lêer bewys niks oor regte, toesteltoegang, resolver-integrasie of die herbeginbeleid wat 'n tonnel nodig het nie, so 'n houer wat begin, is nog nie 'n houer wat werk nie. Stel eers die platformkontrak vas, en beweeg dan na die looptydkontrak met sy gedokumenteerde opsies.

Hou die beeld-digest, die ondersteunde teiken en die konfigurasie saam in dieselfde rekord. 'n Tag-opdatering wat stilweg die argitektuur verander, is makliker om te betrap wanneer die vorige digest neergeskryf is as wanneer die enigste simptoom 'n bekende fout en 'n vars middag se ontfouting is.

Verwante artikels