VPN-Container hält mat 'exec format error' op: falsch Plattform
'exec format error' heescht, datt de Binär fir eng aner CPU gebaut gouf, net datt NET_ADMIN feelt. Liest den Image-Index, ier dir Routen oder Zoustännegkeete ännert.
Containeren, déi direkt mat exec format error ophalen, ruffen de falschen Instinkt op: eng Fäegkeet derbäisetzen, en Apparat montéieren, d'Tunnelkonfiguratioun änneren. Keen dovun erreecht de Problem. De Kernel konnt de Binär guer net ausféieren, wat an engem Container bal ëmmer heescht, datt den Image op eng aner CPU-Architektur wéi dee vum Host zilt. Alles, wat dir un Routing, Zoustännegkeeten oder Privilegien ännere kéint, geschitt, nodeems e Programm gestart ass, an et ass kee Programm gestart.
D'Startmessag, déi wéi e Konfiguratiounsfehler ausgesäit
En exec-Formatfehler kënnt vum Loader, ier d'Applikatioun eng eenzeg Astellung liest. Dofir produzéiert en keng Konfiguratiounswarnungen an och kee Tunnellog, well et kee liewegen Testprozess gëtt, deen se schreift. De Fehler ass och bemierkenswäert séier, dacks ier iwwerhaapt eng Zeil am Containerlog erschéngt. Déi selwecht kuerz Messag erschéngt, egal ob de Binär fir eng aner Architektur, fir en anert Betribssystem oder beschiedegt ass.
Halt d'Lafzäitëmfeld an d'Architektur zesumme mat dem genauen Imageverweis fest, an iwwerpréift dann, wat dësen Verweis tatsächlech ubitt. Op Docker Desktop gehéiert d'Containerplattform zu der Linux-Virtualmaschinn an net zum Laptop, dofir kann d'Hostarchitektur eleng täuschen. Liest d'Indexentréeë fir dësen Verweis amplaz vum Marketingstext op senger Tag-Säit.
Liest den Image-Index virum Startkommando
Wann eng Registry e Multiplattform-Verweis publizéiert, weist den Tag op en Index, an all Entrée nennt eng Plattform mat hirem eegenen Digest. Examinéiert den Verweis am Ament an net en Nopesch-Tag, a liest den Index, amplaz unzehuelen, wat dran ass.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Deen éischte Kommando zielt d'Plattformen op, déi de Verweis publizéiert. Den zweeten mellt d'Plattform vum Image, dee schonn lokal do ass, an deen ass et, deen d'Lafzäit ausféiere wäert. E Verweis mat nëmmen enger Entrée heescht, datt all Host dee selwechte Binär kritt, an den Tag kann enger Maschinn net hëllefen, fir déi en ni gebaut gouf.
Tags wielen eng Variant; si schafen keng
En Multiplattform-Index erlaabt der Lafzäit, eng passend Entrée ze wielen, wat wierklech praktesch ass a dacks mat Portablecht verwiesselt gëtt. D'Auswiel ass eng Sich, keng Iwwersetzung: wann d'Variant feelt, gëtt et näischt auszewielen. Dofir kann dee selwechten Tag op zwou Maschinnen zu zwee verschiddene Binären féieren, an op enger Maschinn zu näischt Brauchbarem.
D'Festleeën iwwer Digest hëlt d'Mehrdeitegkeet ewech an erméiglecht och eng spéider Iwwerpréiwung, well den Digest genee d'Byten identifizéiert, déi getest goufen. Behält dësen Digest mam Deployment-Record, amplaz sech op den Tag ze verloossen, deen zufälleg aktuell war.
Emulatioun ass eng Ofmachung, keng Iwwersetzungsschicht
Emulatioun iwwer eng ënnerstëtzt Lafzäit kann e puer net-native Benotzerraum-Workloads lafe loossen, dofir ass d'absolut Behauptung, eng Architektur kéint ni den Image vun enger anerer lafen, falsch. Et ass och keng allgemeng Léisung. Emuléiert Ausféierung huet aner Leeschtungseigenschaften, an e triviale Prozess, deen ufänkt, seet dir näischt doriwwer, ob e Tunnel-Workload akzeptabel behält.
Dem Docker säin Multiplattform-Guide behandelt native Builds, Kräizkompilatioun an Emulatioun als getrennte Strategien, an dat ass de richtege Wee, d'Optiounen ze liesen. Wielt eng bewosst, a qualifizéiert den VPN-Workload dorënner, amplaz Equivalenz unzehuelen.
Berechtegungen léisen en anere Problem
Eng Netzwierkadministratiouns-Fäegkeet ze ginn oder en TUN-Apparat duerchzeschléngen kann eng inkompatibel ausféierbar Datei net lafen. Dat si Lafzäitberechtegungen, déi e lafende Prozess benotzt; fir e Loader, deen d'Datei schonn ofgeleent huet, si si onsiichtbar.
De Géigendeel ass genee sou wouer. En native Binär beweist näischt iwwer Privilegien, Apparatzougang, Resolver-Integratioun oder d'Restartpolitik, déi en Tunnel brauch, dofir ass en Container, deen ufänkt, nach keen Container, dee funktionéiert. Setzt fir d'éischt de Plattformkontrakt fest, a gitt duerno zum Lafzäitkontrakt mat sengen dokumentéierten Optiounen.
Halt den Image-Digest, de unterstützten Zil an d'Konfiguratioun zesummen am selwechten Record. En Tag-Update, deen d'Architektur stëllt ännert, ass méi einfach ze fänken, wann de viregen Digest opgeschriwwe steet, wéi wann dee eenzegt Symptom e bekannte Fehler an en neien Nomëtteg Debugging ass.