Vsebnik VPN se konča z 'exec format error': napačna platforma
'exec format error' pomeni, da je binarna datoteka zgrajena za drug procesor, ne da manjka NET_ADMIN. Preberite indeks slike, preden uredite poti ali poverilnice.
Vsebniki, ki se takoj končajo z exec format error, spodbujajo napačen instinkt: dodati zmožnost, pripeti napravo, urediti konfiguracijo tunela. Nič od tega ne doseže težave. Jedro binarne datoteke sploh ni moglo izvesti, kar v vsebniku skoraj vedno pomeni, da slika cilja na drugačno arhitekturo procesorja od gostiteljeve. Vse, kar bi lahko spremenili pri usmerjanju, poverilnicah ali pravicah, se zgodi po tem, ko se program zažene, in noben program se ni zagnal.
Začetno sporočilo, ki je videti kot konfiguracijska napaka
Napaka formata exec pride od nalagalnika, preden aplikacija prebere eno samo nastavitev. Zato ne ustvari nobenih konfiguracijskih opozoril niti dnevnika tunela, ker ni živega procesa, ki bi jih zapisal. Napaka je tudi izjemno hitra, pogosto še preden se v dnevniku vsebnika pojavi katera koli vrstica. Isto kratko sporočilo se pojavi ne glede na to, ali je binarna datoteka za drugo arhitekturo, za drug operacijski sistem ali poškodovana.
Zabeležite izvajalno okolje in arhitekturo skupaj z natančno referenco slike, nato preverite, kaj ta referenca dejansko ponuja. V Docker Desktop platforma vsebnika pripada navidezni napravi Linux in ne prenosniku, zato lahko arhitektura gostitelja sama zavaja. Preberite seznam vnosov indeksa za to referenco, ne marketinškega besedila na njeni strani oznake.
Preberite indeks slike pred ukazom za zagon
Ko registracija objavi večplatformsko referenco, oznaka kaže na indeks in vsak vnos poimenuje platformo z lastnim digestom. Preglejte referenco, ki je predmet obravnave, ne sosednje oznake, in berite indeks, namesto da bi predvidevali, kaj vsebuje.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Prvi ukaz navede platforme, ki jih referenca objavlja. Drugi poroča o platformi slike, ki je že prisotna lokalno, in prav to bo zagnalo izvajalno okolje. Referenca z samo enim vnosom pomeni, da vsak gostitelj prejme isto binarno datoteko, in oznaka ne more pomagati stroju, za katerega ni bila nikoli zgrajena.
Oznake izberejo različico; ne ustvarijo je
Večplatformski indeks omogoča izvajalnemu okolju, da izbere ustrezni vnos, kar je res priročno in se pogosto zamenjuje s prenosljivostjo. Izbira je iskanje, ne prevajanje: če različice ni, ni česa izbrati. Zato lahko ista oznaka na dveh gostiteljih vodi v dve različni binarni datoteki, na enem gostitelju pa ne vodi v nič uporabnega.
Pritrditev z digestom odpravi dvoumnost in omogoči tudi poznejši pregled, ker digest natančno identificira preizkušene bajte. Shranite ta digest skupaj z zapisom o namestitvi, namesto da bi se zanašali na oznako, ki je bila slučajno aktualna.
Emulacija je dogovor, ne prevajalska plast
Emulacija prek podprtega izvajalnega okolja lahko izvede nekatere neizvorne delovne obremenitve uporabniškega prostora, zato je absolutna trditev, da ena arhitektura nikoli ne more izvesti slike druge, napačna. Prav tako ni splošna rešitev. Emulirano izvajanje ima drugačne značilnosti delovanja, in trivialen proces, ki se zažene, ne pove ničesar o tem, ali se obremenitev tunela obnaša sprejemljivo.
Večplatformski vodnik Dockerja obravnava izvorne gradnje, navzkrižno prevajanje in emulacijo kot ločene strategije, in to je pravi način branja možnosti. Izberite eno zavestno in preverite obremenitev VPN v njenem okviru, namesto da bi predpostavljali enakovrednost.
Dovoljenja rešujejo drugo težavo
Dodelitev zmožnosti za upravljanje omrežja ali posredovanje naprave TUN ne more prisiliti nezdružljive izvršljive datoteke, da se zažene. To so dovoljenja izvajalnega okolja, ki jih uporablja delujoč proces; za nalagalnik, ki je datoteko že zavrnil, so nevidna.
Nasprotno je prav tako res. Izvorna binarna datoteka ne dokazuje ničesar o pravicah, dostopu do naprav, integraciji resolverja ali politiki ponovnega zagona, ki jo tunel potrebuje, zato vsebnik, ki se zažene, še ni vsebnik, ki deluje. Najprej vzpostavite pogodbo platforme, nato preidite na pogodbo izvajalnega okolja z njenimi dokumentiranimi možnostmi.
Shranjujte digest slike, podprti cilj in konfiguracijo skupaj v istem zapisu. Posodobitev oznake, ki tiho spremeni arhitekturo, je lažje ujeti, ko je prejšnji digest zapisan, kot ko je edini simptom znana napaka in novo popoldne, porabljeno za odpravljanje napak.