VPN kontejner izlazi sa 'exec format error': pogrešna platforma
'exec format error' znači da je binarni fajl izgrađen za drugi procesor, a ne da nedostaje NET_ADMIN. Pročitajte indeks slike prije izmjene ruta ili akreditiva.
Kontejneri koji odmah izlaze sa exec format error izazivaju pogrešan instinkt: dodati mogućnost, montirati uređaj, izmijeniti konfiguraciju tunela. Ništa od toga ne dopire do problema. Jezgro uopšte nije moglo izvršiti binarni fajl, što u kontejneru gotovo uvijek znači da slika cilja na drugu arhitekturu procesora od domaćina. Sve što biste mogli promijeniti u rutiranju, akreditivima ili privilegijama dešava se nakon što je program pokrenut, a nijedan program nije pokrenut.
Poruka pri pokretanju koja izgleda kao greška u konfiguraciji
Neuspjeh exec formata dolazi od učitavača, prije nego što aplikacija pročita ijedno podešavanje. Zato ne proizvodi nikakva konfiguracijska upozorenja ni zapis tunela, jer nema živog procesa da ih napiše. Neuspjeh je i izuzetno brz, često prije nego što se pojavi ijedan red u zapisu kontejnera. Ista kratka poruka pojavljuje se bez obzira na to je li binarni fajl za drugu arhitekturu, za drugi operativni sistem ili oštećen.
Zabilježite okruženje izvršavanja i arhitekturu uz tačnu referencu slike, pa provjerite šta ta referenca zapravo nudi. Na Docker Desktopu platforma kontejnera pripada Linux virtuelnoj mašini, a ne laptopu, pa sama arhitektura domaćina može zavarati. Pročitajte listu unosa indeksa za ovu referencu, umjesto marketinškog teksta na stranici njenog taga.
Pročitajte indeks slike prije naredbe za pokretanje
Kada registar objavi višeplatformsku referencu, tag pokazuje na indeks, a svaki unos imenuje platformu s vlastitim digestom. Pregledajte referencu koja je pred vama, a ne susjedni tag, i čitajte indeks umjesto da pretpostavljate šta sadrži.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Prva naredba navodi platforme koje referenca objavljuje. Druga izvještava o platformi slike koja je već prisutna lokalno, a upravo nju će izvršiti okruženje. Referenca sa samo jednim unosom znači da svaki domaćin dobija isti binarni fajl, a tag ne može pomoći mašini za koju nikad nije izgrađen.
Oznake biraju varijantu; one je ne stvaraju
Višeplatformski indeks omogućava okruženju da odabere odgovarajući unos, što je zaista zgodno i često se pogrešno smatra prenosivošću. Odabir je pretraga, a ne prijevod: ako varijanta nedostaje, nema šta da se odabere. Isti tag na dva domaćina stoga može dati dva različita binarna fajla, a na jednom domaćinu ne daje ništa upotrebljivo.
Pričvršćivanje digestom uklanja nejasnoću i takođe omogućava kasniji pregled, jer digest tačno identifikuje bajtove koji su testirani. Čuvajte taj digest uz zapis o postavljanju, umjesto da se oslanjate na tag koji je slučajno bio aktuelan.
Emulacija je dogovor, a ne sloj prevođenja
Emulacija kroz podržano okruženje može pokretati neke nenativne korisničke radne zadatke, pa je apsolutna tvrdnja da jedna arhitektura nikada ne može pokrenuti sliku druge pogrešna. To takođe nije opšte rješenje. Emulirano izvršavanje ima drugačije karakteristike performansi, a trivijalan proces koji se pokrene ne govori ništa o tome da li se radni zadatak tunela ponaša prihvatljivo.
Dockerov vodič za više platformi tretira nativne buildove, unakrsnu kompilaciju i emulaciju kao odvojene strategije, i to je ispravan način čitanja opcija. Odaberite jednu namjerno i provjerite VPN radni zadatak pod njom, umjesto da pretpostavljate ekvivalentnost.
Dozvole rješavaju drugi problem
Dodjeljivanje mogućnosti za administraciju mreže ili prosljeđivanje TUN uređaja ne može natjerati nekompatibilni izvršni fajl da se pokrene. To su dozvole okruženja koje koristi pokrenuti proces; one su nevidljive učitavaču koji je već odbio datoteku.
Obrnuto je jednako tačno. Nativni binarni fajl ništa ne dokazuje o privilegijama, pristupu uređajima, integraciji resolvera ili politici ponovnog pokretanja koja je tunelu potrebna, pa kontejner koji se pokrene još nije kontejner koji radi. Prvo uspostavite ugovor o platformi, a zatim pređite na ugovor o okruženju s njegovim dokumentovanim opcijama.
Držite digest slike, podržani cilj i konfiguraciju zajedno u istom zapisu. Ažuriranje taga koje tiho mijenja arhitekturu lakše je uhvatiti kada je prethodni digest zapisan, nego kada je jedini simptom poznata greška i svježe poslijepodne potrošeno na otklanjanje problema.