VPN կոնտեյները դուրս է գալիս 'exec format error'-ով՝ սխալ հարթակ
'exec format error'-ը նշանակում է, որ բինարը կառուցվել է այլ պրոցեսորի համար, ոչ թե բացակայում է NET_ADMIN-ը։ Կարդացեք պատկերի ինդեքսը՝ նախքան երթուղիներ կամ հավատարմագրեր խմբագրելը։
Կոնտեյներները, որոնք անմիջապես դուրս են գալիս exec format error-ով, առաջացնում են սխալ բնազդ՝ ավելացնել հնարավորություն, միացնել սարք, խմբագրել թունելի կոնֆիգուրացիան։ Դրանցից ոչ մեկը չի հասնում խնդրին։ Միջուկը ընդհանրապես չկարողացավ գործարկել բինարը, ինչը կոնտեյներում գրեթե միշտ նշանակում է, որ պատկերը նպատակաուղղված է հոսթից տարբեր պրոցեսորային ճարտարապետության։ Այն ամենը, ինչ կարող էիք փոխել երթուղավորումում, հավատարմագրերում կամ արտոնություններում, տեղի է ունենում ծրագրի մեկնարկից հետո, և ոչ մի ծրագիր չի մեկնարկել։
Մեկնարկային հաղորդագրությունը, որը կարծես կոնֆիգուրացիայի սխալ է
exec ձևաչափի ձախողումը գալիս է բեռնիչից, նախքան հավելվածը կկարդա անգամ մեկ կարգավորում։ Այդ պատճառով այն չի առաջացնում կոնֆիգուրացիայի նախազգուշացումներ կամ թունելի մատյան, քանի որ չկա կենդանի գործընթաց, որը կգրի դրանք։ Ձախողումը նաև զարմանալիորեն արագ է, հաճախ նախքան կոնտեյների մատյանում ընդհանրապես տող հայտնվելը։ Նույն կարճ հաղորդագրությունը հայտնվում է անկախ նրանից՝ բինարը այլ ճարտարապետության, այլ օպերացիոն համակարգի համար է, թե վնասված։
Գրանցեք գործարկման միջավայրը և ճարտարապետությունը ճշգրիտ պատկերի հղումի հետ միասին, ապա ստուգեք, թե ինչ է իրականում առաջարկում այդ հղումը։ Docker Desktop-ում կոնտեյների հարթակը պատկանում է Linux վիրտուալ մեքենային, ոչ թե նոութբուքին, ուստի միայն հոսթի ճարտարապետությունը կարող է մոլորեցնել։ Կարդացեք այս հղման ինդեքսի գրառումների ցանկը, այլ ոչ թե դրա պիտակի էջի մարքեթինգային տեքստը։
Կարդացեք պատկերի ինդեքսը գործարկման հրամանից առաջ
Երբ ռեեստրը հրապարակում է բազմահարթակ հղում, պիտակը ցույց է տալիս ինդեքսի վրա, և յուրաքանչյուր գրառում նշում է հարթակ իր սեփական digest-ով։ Քննեք քննարկվող հղումը, ոչ թե հարևան պիտակը, և կարդացեք ինդեքսը՝ դրա բովանդակությունը ենթադրելու փոխարեն։
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Առաջին հրամանը թվարկում է այն հարթակները, որոնք հրապարակում է հղումը։ Երկրորդը հայտնում է տեղում արդեն առկա պատկերի հարթակը, և հենց այն կգործարկի գործարկման միջավայրը։ Միայն մեկ գրառում ունեցող հղումը նշանակում է, որ յուրաքանչյուր հոսթ ստանում է նույն բինարը, և պիտակը չի կարող օգնել մեքենային, որի համար այն երբեք չի կառուցվել։
Պիտակները ընտրում են տարբերակ, այլ ոչ թե ստեղծում այն
Բազմահարթակ ինդեքսը թույլ է տալիս գործարկման միջավայրին ընտրել համապատասխան գրառում, ինչը իսկապես հարմար է և հաճախ շփոթում են տեղափոխելիության հետ։ Ընտրությունը որոնում է, ոչ թե թարգմանություն. եթե տարբերակը բացակայում է, ընտրելու բան չկա։ Այսպիսով, նույն պիտակը երկու հոսթերում կարող է հանգեցնել երկու տարբեր բինարի, իսկ մեկ հոսթում այն ոչ մի օգտակար բանի չի հանգեցնում։
digest-ով ամրացումը վերացնում է երկիմաստությունը և նաև հնարավոր դարձնում ավելի ուշ վերանայումը, քանի որ digest-ը ճշգրիտ նույնականացնում է փորձարկված բայթերը։ Պահեք այդ digest-ը տեղակայման գրառման հետ միասին՝ պատահաբար ընթացիկ պիտակի վրա հույս դնելու փոխարեն։
Էմուլյացիան պայմանավորվածություն է, ոչ թե թարգմանության շերտ
Աջակցվող գործարկման միջավայրի միջոցով էմուլյացիան կարող է գործարկել որոշ ոչ բնիկ օգտվողական տարածության ծանրաբեռնվածություններ, ուստի այն բացարձակ պնդումը, թե մի ճարտարապետությունը երբեք չի կարող գործարկել մյուսի պատկերը, սխալ է։ Այն նաև ընդհանուր լուծում չէ։ Էմուլացված կատարումն ունի տարբեր արդյունավետության բնութագրեր, և մեկնարկող չնչին գործընթացը ոչինչ չի ասում այն մասին, թե արդյոք թունելի ծանրաբեռնվածությունը վարվում է ընդունելիորեն։
Docker-ի բազմահարթակ ուղեցույցը բնիկ կառուցումները, խաչաձև կոմպիլյացիան և էմուլյացիան դիտարկում է որպես առանձին ռազմավարություններ, և դա տարբերակները կարդալու ճիշտ ձևն է։ Ընտրեք մեկը գիտակցաբար և որակավորեք VPN ծանրաբեռնվածությունը դրա ներքո՝ համարժեքություն ենթադրելու փոխարեն։
Թույլտվությունները լուծում են այլ խնդիր
Ցանցային կառավարման հնարավորություն տալը կամ TUN սարքը փոխանցելը չի կարող ստիպել անհամատեղելի գործարկվող ֆայլին աշխատել։ Սրանք գործարկման թույլտվություններ են, որոնք օգտագործում է աշխատող գործընթացը. դրանք անտեսանելի են բեռնիչի համար, որն արդեն մերժել է ֆայլը։
Հակառակը նույնքան ճիշտ է։ Բնիկ բինարը ոչինչ չի ապացուցում արտոնությունների, սարքերի հասանելիության, resolver-ի ինտեգրման կամ վերագործարկման քաղաքականության մասին, որն անհրաժեշտ է թունելին, ուստի մեկնարկող կոնտեյները դեռ աշխատող կոնտեյներ չէ։ Նախ սահմանեք հարթակի պայմանագիրը, ապա անցեք գործարկման պայմանագրին՝ դրա փաստաթղթավորված տարբերակներով։
Պահեք պատկերի digest-ը, աջակցվող թիրախը և կոնֆիգուրացիան միասին նույն գրառման մեջ։ Չհռչակված ճարտարապետություն փոխող պիտակի թարմացումը ավելի հեշտ է բռնել, երբ նախորդ digest-ը գրի է առնված, քան երբ միակ ախտանիշը ծանոթ սխալն ու վրիպազերծման նոր կեսօրն է։