VPN konteyneri 'exec format error' bilan chiqadi: noto'g'ri platforma
'exec format error' ikkilik fayl boshqa CPU uchun qurilganini bildiradi, NET_ADMIN yo'qligini emas. Marshrutlar yoki hisob ma'lumotlarini tahrirlashdan oldin tasvir indeksini o'qing.
exec format error bilan darhol chiqadigan konteynerlar noto'g'ri instinktni uyg'otadi: qobiliyat qo'shish, qurilma o'rnatish, tunnel konfiguratsiyasini tahrirlash. Ularning hech biri muammoga yetib bormaydi. Yadro ikkilik faylni umuman ishga tushira olmadi, bu konteynerda deyarli har doim tasvir xostnikidan farqli CPU arxitekturasini nishonga olganini bildiradi. Marshrutlash, hisob ma'lumotlari yoki imtiyozlarda o'zgartirishingiz mumkin bo'lgan hamma narsa dastur boshlangandan keyin sodir bo'ladi va hech bir dastur boshlanmadi.
Konfiguratsiya xatosiga o'xshab ko'rinadigan ishga tushish xabari
exec format xatosi yuklagichdan keladi, ilova birorta sozlamani o'qishidan oldin. Shuning uchun u hech qanday konfiguratsiya ogohlantirishi yoki tunnel jurnalini yaratmaydi, chunki ularni yozadigan tirik jarayon yo'q. Xato ham hayratlanarli darajada tez, ko'pincha konteyner jurnalida birorta satr paydo bo'lishidan oldin. Xuddi shu qisqa xabar ikkilik fayl boshqa arxitektura uchun, boshqa operatsion tizim uchun bo'lsa yoki shikastlangan bo'lsa ham paydo bo'ladi.
Ishga tushish muhiti va arxitekturani aniq tasvir havolasi bilan birga yozib oling, so'ngra bu havola aslida nima taklif qilishini tekshiring. Docker Desktop'da konteyner platformasi noutbukka emas, Linux virtual mashinasiga tegishli, shuning uchun faqat xost arxitekturasi chalg'itishi mumkin. Bu havola uchun indeks yozuvlari ro'yxatini o'qing, uning teg sahifasidagi marketing matnini emas.
Ishga tushirish buyrug'idan oldin tasvir indeksini o'qing
Reyestr ko'p platformali havolani e'lon qilganda, teg indeksga ishora qiladi va har bir yozuv o'z digestiga ega platformani nomlaydi. Ko'rib chiqilayotgan havolani tekshiring, qo'shni tegni emas, va uning ichida nima borligini taxmin qilish o'rniga indeksni o'qing.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Birinchi buyruq havola e'lon qiladigan platformalarni sanab chiqadi. Ikkinchisi allaqachon lokal mavjud tasvirning platformasini xabar qiladi va ishga tushirish muhiti aynan shuni ishga tushiradi. Faqat bitta yozuvli havola har bir xost bir xil ikkilik faylni olishini bildiradi va teg hech qachon qurilmagan mashinaga yordam bera olmaydi.
Teglar variantni tanlaydi; uni yaratmaydi
Ko'p platformali indeks ishga tushirish muhitiga mos yozuvni tanlash imkonini beradi, bu haqiqatan qulay va ko'pincha ko'chiriluvchanlik bilan aralashtiriladi. Tanlov — qidiruv, tarjima emas: agar variant yo'q bo'lsa, tanlash uchun hech narsa yo'q. Shuning uchun bir xil teg ikki xostda ikki xil ikkilik faylga olib kelishi mumkin, bir xostda esa hech qanday foydali narsaga olib kelmaydi.
digest bilan mahkamlash noaniqlikni yo'q qiladi va keyinroq ko'rib chiqishga ham imkon beradi, chunki digest sinovdan o'tgan baytlarni aniq belgilaydi. O'sha digestni joylashtirish yozuvi bilan birga saqlang, tasodifan amaldagi teg hisoblanganiga tayanch o'rniga.
Emulyatsiya — bu kelishuv, tarjima qatlami emas
Qo'llab-quvvatlanadigan ishga tushirish muhiti orqali emulyatsiya ba'zi mahalliy bo'lmagan foydalanuvchi maydoni yuklamalarini ishga tushirishi mumkin, shuning uchun bir arxitektura hech qachon boshqasining tasvirini ishga tushira olmaydi degan mutlaq da'vo noto'g'ri. Bu ham umumiy yechim emas. Emulyatsiya qilingan ijroning ishlash xususiyatlari boshqacha va boshlanayotgan ahamiyatsiz jarayon tunnel yuklamasi maqbul tarzda ishlaydimi-yo'qmi haqida hech narsa aytmaydi.
Docker'ning ko'p platformali qo'llanmasi mahalliy qurilmalar, o'zaro kompilyatsiya va emulyatsiyani alohida strategiyalar deb hisoblaydi va variantlarni o'qishning to'g'ri yo'li shu. Birini ataylab tanlang va ekvivalentlikni taxmin qilish o'rniga uning ostida VPN yuklamasini baholang.
Ruxsatlar boshqa muammoni hal qiladi
Tarmoq administratsiyasi qobiliyatini berish yoki TUN qurilmasini o'tkazish mos kelmaydigan bajariladigan faylni ishga tushira olmaydi. Bular ishlab turgan jarayon ishlatadigan ishga tushirish ruxsatlari; ular faylni allaqachon rad etgan yuklagich uchun ko'rinmas.
Buning aksi ham shunchalik to'g'ri. Mahalliy ikkilik fayl imtiyozlar, qurilmalarga kirish, resolver integratsiyasi yoki tunnelga kerak bo'ladigan qayta ishga tushirish siyosati haqida hech narsani isbotlamaydi, shuning uchun boshlanayotgan konteyner hali ishlaydigan konteyner emas. Avval platforma shartnomasini o'rnating, so'ngra uning hujjatlashtirilgan variantlari bilan ishga tushirish shartnomasiga o'ting.
Tasvir digestini, qo'llab-quvvatlanadigan maqsadni va konfiguratsiyani bitta yozuvda birga saqlang. Arxitekturani jimgina o'zgartiruvchi teg yangilanishini ushlash oldingi digest yozib qo'yilganda osonroq, yagona alomat tanish xato va disk raskadrovkaga sarflangan yangi tushdan keyin bo'lganidan ko'ra.