VPN konteiners iziet ar 'exec format error': nepareiza platforma
'exec format error' nozīmē, ka binārais fails ir būvēts citam procesoram, nevis to, ka trūkst NET_ADMIN. Izlasiet attēla indeksu pirms maršrutu vai akreditācijas datu rediģēšanas.
Konteinieri, kas nekavējoties iziet ar exec format error, izraisa nepareizu instinktu: pievienot iespēju, montēt ierīci, rediģēt tuneļa konfigurāciju. Neviens no tiem nesasniedz problēmu. Kodols vispār nevarēja izpildīt bināro failu, kas konteinerā gandrīz vienmēr nozīmē, ka attēls ir paredzēts citai CPU arhitektūrai nekā resursdatora. Viss, ko jūs varētu mainīt maršrutēšanā, akreditācijas datos vai privilēģijās, notiek pēc tam, kad programma ir palaista, un neviena programma netika palaista.
Sāknēšanas ziņojums, kas izskatās kā konfigurācijas kļūda
exec formāta kļūme nāk no ielādētāja, pirms lietojumprogramma nolasa pat vienu iestatījumu. Tāpēc tā neizveido konfigurācijas brīdinājumus vai tuneļa žurnālu, jo nav neviena dzīva procesa, kas tos rakstītu. Kļūme ir arī ievērojami ātra, bieži pirms konteinera žurnālā vispār parādās kāda rinda. Tas pats īsais ziņojums parādās neatkarīgi no tā, vai binārais fails ir citai arhitektūrai, citai operētājsistēmai vai bojāts.
Pierakstiet izpildes vidi un arhitektūru kopā ar precīzu attēla atsauci, pēc tam pārbaudiet, ko šī atsauce faktiski piedāvā. Docker Desktop vidē konteinera platforma pieder Linux virtuālajai mašīnai, nevis portatīvajam datoram, tāpēc vien resursdatora arhitektūra var maldināt. Izlasiet šīs atsauces indeksa ierakstu sarakstu, nevis mārketinga tekstu tās atzīmes lapā.
Izlasiet attēla indeksu pirms palaišanas komandas
Kad reģistrs publicē vairāku platformu atsauci, atzīme norāda uz indeksu, un katrs ieraksts nosauc platformu ar savu digest. Pārbaudiet izskatāmo atsauci, nevis blakus atzīmi, un lasiet indeksu, nevis pieņemiet, kas tajā ir.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Pirmā komanda uzskaita platformas, ko atsauce publicē. Otrā ziņo par jau lokāli esošā attēla platformu, un tieši to izpildīs izpildes vide. Atsauce ar tikai vienu ierakstu nozīmē, ka katrs resursdators saņem to pašu bināro failu, un atzīme nevar palīdzēt mašīnai, kurai tā nekad nav būvēta.
Atzīmes izvēlas variantu; tās to neveido
Vairāku platformu indekss ļauj izpildes videi izvēlēties atbilstošu ierakstu, kas patiešām ir ērti un bieži tiek sajaukts ar pārnesamību. Izvēle ir meklēšana, nevis tulkojums: ja varianta nav, nav ko izvēlēties. Tāpēc viena un tā pati atzīme divos resursdatoros var dot divus dažādus bināros failus, bet vienā resursdatorā tā nedod neko lietderīgu.
Piespraušana ar digest novērš neskaidrību un arī ļauj vēlāk pārskatīt, jo digest precīzi identificē pārbaudītos baitus. Glabājiet šo digest kopā ar izvietošanas ierakstu, nevis paļaujoties uz atzīmi, kas nejauši bija aktuāla.
Emulācija ir vienošanās, nevis tulkošanas slānis
Emulācija ar atbalstītu izpildes vidi var palaist dažas neoriģinālas lietotāja telpas darba slodzes, tāpēc absolūtais apgalvojums, ka viena arhitektūra nekad nevarēs palaist citas attēlu, ir nepareizs. Tas arī nav vispārējs risinājums. Emulētai izpildei ir citas veiktspējas īpašības, un triviāls process, kas sākas, neko nepasaka par to, vai tuneļa darba slodze uzvedas pieņemami.
Docker vairāku platformu rokasgrāmata uzskata vietējās būves, krusta kompilāciju un emulāciju par atsevišķām stratēģijām, un tas ir pareizais veids, kā lasīt iespējas. Izvēlieties vienu apzināti un novērtējiet VPN darba slodzi ar to, nevis pieņemot līdzvērtību.
Atļaujas risina citu problēmu
Tīkla administrēšanas iespējas piešķiršana vai TUN ierīces nodošana nevar likt nesaderīgam izpildāmam failam darboties. Tās ir izpildes atļaujas, ko izmanto darbojošs process; tās ir neredzamas ielādētājam, kas failu jau ir noraidījis.
Pretējais ir tikpat patiess. Vietējais binārais fails neko nepierāda par privilēģijām, ierīču piekļuvi, resolver integrāciju vai restartēšanas politiku, kas tunelim nepieciešama, tāpēc konteiners, kas sāk darboties, vēl nav konteiners, kas strādā. Vispirms nosakiet platformas līgumu, pēc tam pārejiet uz izpildes līgumu ar tā dokumentētajām iespējām.
Glabājiet attēla digest, atbalstīto mērķi un konfigurāciju kopā vienā ierakstā. Atzīmes atjauninājumu, kas klusi maina arhitektūru, ir vieglāk uztvert, ja iepriekšējais digest ir pierakstīts, nekā tad, ja vienīgais simptoms ir pazīstama kļūda un jauna pēcpusdiena atkļūdošanai.