Konteinerid, mis väljuvad kohe exec format error tõttu, kutsuvad esile vale instinkti: lisada võimekus, paigaldada seade, muuta tunnelikonfiguratsiooni. Ükski neist ei jõua probleemini. Kernel ei suutnud binaarfaili üldse käivitada, mis konteineris tähendab peaaegu alati, et pilt sihib hostist erinevat protsessori arhitektuuri. Kõik, mida te võiksite marsruutimise, volituste või õiguste juures muuta, juhtub pärast seda, kui programm on käivitunud, ja ükski programm ei käivitunud.

Algmeld, mis näeb välja nagu konfiguratsiooniviga

Exec-formaadi tõrge tuleb laadijalt, enne kui rakendus loeb ühtki seadet. Seetõttu ei tekita see konfiguratsioonihoiatusi ega tunnelilogisid, sest pole ühtki elusat protsessi, mis neid kirjutaks. Tõrge on ka märkimisväärselt kiire, sageli enne, kui konteineri logisse üldse ükski rida ilmub. Sama lühike teade ilmub olenemata sellest, kas binaarfail on mõeldud teisele arhitektuurile, teisele operatsioonisüsteemile või on kahjustatud.

Kirjutage käituskeskkond ja arhitektuur üles koos täpse pildiviitega, seejärel kontrollige, mida see viide tegelikult pakub. Docker Desktopis kuulub konteineri platvorm Linuxi virtuaalmasinale, mitte sülearvutile, seega võib ainult hosti arhitektuur eksitada. Lugege selle viite indeksikirjeid, mitte turundusteksti selle sildi lehel.

Lugege pildiindeksit enne käivituskäsku

Kui register avaldab mitme platvormi viite, osutab silt indeksile ja iga kirje nimetab platvormi koos oma digestiga. Uurige käsilolevat viidet, mitte naabersilti, ja lugege indeksit, selle asemel et eeldada, mida see sisaldab.

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

Esimene käsk loetleb platvormid, mida viide avaldab. Teine teatab juba kohalikult olemasoleva pildi platvormi, ja just seda käitab käituskeskkond. Ainult ühe kirjega viide tähendab, et iga host saab sama binaarfaili, ja silt ei saa aidata masinat, mille jaoks seda kunagi ei ehitatud.

Sildid valivad variandi; nad ei loo seda

Mitme platvormi indeks lubab käituskeskkonnal valida sobiva kirje, mis on tõesti mugav ja mida sageli aetakse segi portatiivsusega. Valik on otsing, mitte tõlge: kui variant puudub, pole midagi valida. Seega võib sama silt kahes hostis anda kaks erinevat binaarfaili ja ühes hostis ei anna see midagi kasutatavat.

Digestiga kinnitamine kõrvaldab ebaselguse ja teeb võimalikuks ka hilisema ülevaatamise, sest digest tuvastab täpselt testitud baidid. Hoidke seda digesti juurutuskirje juures, selle asemel et loota sildile, mis juhtus parajasti kehtiv olema.

Emuleerimine on kokkulepe, mitte tõlkekiht

Toetatud käituskeskkonna kaudu emuleerimine suudab käitada mõningaid mitteomaseid kasutajaruumi töökoormusi, seega väide, et üks arhitektuur ei saa kunagi käitada teise pilti, on vale. See ei ole ka üldine lahendus. Emuleeritud käitamisel on erinevad jõudlusnäitajad ja tühine protsess, mis käivitub, ei ütle teile midagi selle kohta, kas tunnelikoormus käitub vastuvõetavalt.

Dockeri mitme platvormi juhend käsitleb omaseid ehitussi, ristkompileerimist ja emuleerimist eraldi strateegiatena, ja see on õige viis valikute lugemiseks. Valige üks teadlikult ja kvalifitseerige VPN-i töökoormus selle all, selle asemel et eeldada samaväärsust.

Õigused lahendavad teise probleemi

Võrguadministreerimise võimekuse andmine või TUN-seadme läbilaskmine ei saa panna ühildumatut käivitatavat faili tööle. Need on käitusõigused, mida kasutab töötav protsess; need on nähtamatud laadijale, kes on faili juba tagasi lükanud.

Vastupidine on sama tõsi. Omane binaarfail ei tõesta midagi õiguste, seadmejuurdepääsu, resolveri integreerimise ega taaskäivituspõhimõtte kohta, mida tunnel vajab, seega konteiner, mis käivitub, ei ole veel konteiner, mis töötab. Kehtestage esmalt platvormileping ja seejärel liikuge käituslepingule koos selle dokumenteeritud valikutega.

Hoidke pildi digest, toetatud sihtmärk ja konfiguratsioon koos samas kirjes. Sildi uuendust, mis vaikselt arhitektuuri muudab, on lihtsam tabada, kui eelmine digest on üles kirjutatud, kui siis, kui ainus sümptom on tuttav viga ja värske pärastlõuna silumist.

Seotud artiklid