A VPN-konténer 'exec format error' hibával lép ki: rossz platform
Az 'exec format error' azt jelenti, hogy a bináris másik CPU-hoz készült, nem azt, hogy hiányzik a NET_ADMIN. Olvassa el az image indexét, mielőtt útvonalakat vagy hitelesítő adatokat szerkeszt.
A exec format error hibával azonnal kilépő konténerek rossz ösztönt keltenek: adjunk hozzá képességet, csatoljunk eszközt, szerkesszük az alagút konfigurációját. Ezek egyike sem éri el a problémát. A kernel egyáltalán nem tudta végrehajtani a binárist, ami egy konténerben szinte mindig azt jelenti, hogy az image a hostétól eltérő CPU-architektúrát céloz. Minden, amit az útvonalakon, hitelesítő adatokon vagy jogosultságokon módosíthatna, azután történik, hogy egy program elindult, és egyetlen program sem indult el.
A konfigurációs hibának tűnő indítási üzenet
Az exec-formátum meghibásodása a betöltőtől származik, mielőtt az alkalmazás egyetlen beállítást is beolvasna. Ezért nem generál konfigurációs figyelmeztetéseket és alagútnaplót, mert nincs élő folyamat, amely kiírná őket. A hiba emellett figyelemre méltóan gyors, gyakran még azelőtt, hogy egyáltalán megjelenne egy sor a konténer naplójában. Ugyanez a rövid üzenet jelenik meg, akár más architektúrához, akár más operációs rendszerhez készült a bináris, akár sérült.
Rögzítse a futtatókörnyezetet és az architektúrát a pontos image-hivatkozással együtt, majd ellenőrizze, mit kínál valójában ez a hivatkozás. A Docker Desktopon a konténer platformja a Linux virtuális géphez tartozik, nem a laptophoz, ezért a host architektúrája önmagában megtéveszthet. Olvassa el a hivatkozás indexbejegyzéseit, ne a tag-oldalának marketing szövegét.
Olvassa el az image indexét a futtatási parancs előtt
Amikor egy registry többplatformos hivatkozást tesz közzé, a tag egy indexre mutat, és minden bejegyzés saját digesttel nevez meg egy platformot. Vizsgálja meg a szóban forgó hivatkozást, ne egy szomszédos taget, és olvassa el az indexet ahelyett, hogy feltételezné a tartalmát.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Az első parancs felsorolja a hivatkozás által közzétett platformokat. A második a helyben már jelen lévő image platformját jelenti, és pontosan azt fogja futtatni a futtatókörnyezet. Egyetlen bejegyzéssel rendelkező hivatkozás azt jelenti, hogy minden host ugyanazt a binárist kapja, és a tag nem tud segíteni egy olyan gépen, amelyhez soha nem építették.
A tagek variánst választanak; nem hoznak létre egyet
A többplatformos index lehetővé teszi a futtatókörnyezetnek, hogy megfelelő bejegyzést válasszon, ami valóban kényelmes, és gyakran összetévesztik a hordozhatósággal. A kiválasztás egy keresés, nem fordítás: ha a variáns hiányzik, nincs mit kiválasztani. Ezért ugyanaz a tag két hoston két különböző binárist eredményezhet, egy hoston pedig semmi használhatót.
A digesttel való rögzítés megszünteti a kétértelműséget, és lehetővé tesz egy későbbi felülvizsgálatot is, mert a digest pontosan azonosítja a tesztelt bájtokat. Őrizze meg ezt a digestet a telepítési rekorddal együtt, ahelyett hogy arra a tagre támaszkodna, amely éppen aktuális volt.
Az emuláció egy megegyezés, nem fordítási réteg
A támogatott futtatókörnyezeten keresztüli emuláció képes néhány nem natív felhasználói térbeli terhelést futtatni, ezért az az abszolút állítás, hogy egy architektúra soha nem futtathatja egy másik image-ét, hamis. Ez sem általános megoldás. Az emulált végrehajtás teljesítményjellemzői eltérőek, és egy triviális folyamat elindulása semmit nem mond arról, hogy az alagút-terhelés elfogadhatóan viselkedik-e.
A Docker többplatformos útmutatója a natív buildeket, a keresztfordítást és az emulációt külön stratégiákként kezeli, és ez a helyes módja a lehetőségek olvasásának. Válasszon egyet szándékosan, és a VPN-terhelést ez alatt minősítse, ne pedig egyenértékűséget feltételezzen.
Az engedélyek más problémát oldanak meg
Hálózati adminisztrációs képesség adása vagy TUN-eszköz átadása nem tud működésre bírni egy inkompatibilis végrehajtható fájlt. Ezek futtatókörnyezeti engedélyek, amelyeket egy futó folyamat használ; láthatatlanok egy betöltő számára, amely már elutasította a fájlt.
Az ellenkezője ugyanígy igaz. Egy natív bináris semmit nem bizonyít a jogosultságokról, az eszközhozzáférésről, a resolver-integrációról vagy az újraindítási szabályzatról, amelyre egy alagútnak szüksége van, ezért az elinduló konténer még nem működő konténer. Először a platform-szerződést rögzítse, majd lépjen tovább a futtatókörnyezeti szerződésre, annak dokumentált lehetőségeivel.
Tartsa együtt az image digestjét, a támogatott célt és a konfigurációt ugyanabban a rekordban. A csendesen architektúrát váltó tagfrissítést könnyebb elkapni, ha az előző digest le van írva, mint ha az egyetlen tünet egy ismerős hiba és egy friss hibakereséssel töltött délután.