VPN-kontener stopet mei 'exec format error': ferkeard platfoarm
'exec format error' betsjut dat de binary foar in oare CPU boud is, net dat NET_ADMIN ûntbrekt. Lês de byldyndeks foardat jo rûtes of oanmeldgegevens bewurkje.
Konteners dy't daliks stopje mei exec format error, roppe it ferkearde ynstinkt op: in kapasiteit taheakje, in apparaat mounte, de tunnelkonfiguraasje bewurkje. Gjin fan dizze berikt it probleem. De kernel koe de binary hielendal net útfiere, wat yn in kontener hast altyd betsjut dat it byld rjochte is op in oare CPU-arsjitektuer as de host. Alles wat jo oan routing, oanmeldgegevens of privileezjes feroarje kinne, bart neidat in programma start is, en gjin programma is start.
It startberjocht dat op in konfiguraasjeflater liket
In exec-formaatflater komt fan de loader, foardat de applikaasje ien ynstelling lêst. Dêrom produsearret it gjin konfiguraasjewarskôgingen en gjin tunnellog, want der is gjin libbend proses om se te skriuwen. De flater is ek opfallend fluch, faak foardat der hielendal in rigel yn it kontenerlog ferskynt. Itselde koarte berjocht ferskynt oft de binary foar in oare arsjitektuer, foar in oar bestjoeringssysteem is of skansearre.
Skriuw de útfieromjouwing en arsjitektuer op tegearre mei de krekte byldferwizing, en kontrolearje dan wat dy ferwizing echt biedt. Op Docker Desktop heart it kontenerplatfoarm by de Linux-firtuele masine en net by de laptop, dus de hostarsjitektuer allinnich kin misliede. Lês de yndeksynskriuwings foar dizze ferwizing, ynstee fan de marketingtekst op har tag-side.
Lês de byldyndeks foar it útfierkommando
As in register in multiplatfoarm-ferwizing publisearret, wiist de tag nei in yndeks, en elk ynskriuwing neamt in platfoarm mei eigen digest. Undersykje de ferwizing dy't jo besjen, net in buortag, en lês de yndeks ynstee fan oan te nimmen wat der yn stiet.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
It earste kommando listet de platfoarms op dy't de ferwizing publisearret. It twadde rapportearret it platfoarm fan it byld dat al lokaal oanwêzich is, en dat is wat de útfieromjouwing útfiere sil. In ferwizing mei mar ien ynskriuwing betsjut dat elke host deselde binary krijt, en de tag kin in masine net helpe dêr't er nea foar boud is.
Tags selektearje in fariant; se meitsje der gjin
In multiplatfoarm-yndeks lit de útfieromjouwing in passende ynskriuwing kieze, wat echt handich is en faak foar portabiliteit oansjoen wurdt. De seleksje is in syktocht, gjin oersetting: as de fariant ûntbrekt, is der neat te selektearjen. Dêrom kin deselde tag op twa hosts nei twa ferskillende binaries liede, en op ien host liedt er nei neat brûkbers.
Fêstsetten fia digest hellet de dûbelsinnigens wei en makket ek in lettere beoardieling mooglik, want de digest identifisearret krekt de bytes dy't test binne. Bewarje dy digest by it útrôljouwe records, ynstee fan te fertrouwen op de tag dy't tafallich aktueel wie.
Emulaasje is in regeling, gjin oersettingslaach
Emulaasje fia in stipe útfieromjouwing kin guon net-native brûkersromte-wurklasten útfiere, dus de absolute bewearing dat ien arsjitektuer nea it byld fan in oare útfiere kin, is ferkeard. It is ek gjin algemiene oplossing. Emulearre útfiering hat oare prestaasjeskaaimerken, en in triviale proses dat start seit neat oer oft in tunnelwurklast akseptabel gedraacht.
Docker syn multiplatfoarm-gids behannelet native builds, krúskompilaasje en emulaasje as aparte strategyen, en dat is de juste manier om de opsjes te lêzen. Kies ien bewust, en kwalifisearje de VPN-wurklast dêrûnder, ynstee fan ekwivalinsje oan te nimmen.
Permisjes oplosse in oar probleem
It jaan fan in netwurkbehear-kapasiteit of it trochjaan fan in TUN-apparaat kin in ynkompatibele útfierbere triem net draaie litte. Dit binne útfierpermissionen dy't in rinnend proses brûkt; se binne ûnsichtber foar in loader dy't de triem al wegere hat.
It omkearde is like wier. In native binary bewissiget neat oer privileezjes, apparaattagong, resolver-yntegraasje of it werstartbelied dat in tunnel nedich hat, dus in kontener dy't start is noch gjin kontener dy't wurket. Fêstigje earst it platfoarmkontrakt, en gean dan oer nei it útfierkontrakt mei syn dokumintearre opsjes.
Hâld de bylddigest, it stipe doel en de konfiguraasje byinoar yn itselde record. In tag-bywurking dy't stil de arsjitektuer feroaret, is makliker te fangen as de foarige digest opskreaun is, as wannear't it iennige symptoom in fertroude flater en in nije middei debuggen is.