VPN konteyneri 'exec format error' ilə dayanır: yanlış platforma
'exec format error' ikili faylın başqa prosessor üçün qurulduğunu bildirir, NET_ADMIN-in çatışmadığını deyil. Marşrutları və ya etimad məlumatlarını redaktə etməzdən əvvəl obraz indeksini oxuyun.
Dərhal exec format error ilə dayanan konteynerlər yanlış instinkti oyadır: qabiliyyət əlavə etmək, cihaz qoşmaq, tunel konfiqurasiyasını redaktə etmək. Bunların heç biri problemə toxunmur. Yadro ikili faylı ümumiyyətlə icra edə bilmədi, bu da konteynerdə demək olar ki, həmişə obrazın hostdan fərqli prosessor arxitekturasına hədəfləndiyini bildirir. Marşrutlar, etimad məlumatları və ya imtiyazlarla bağlı dəyişə biləcəyiniz hər şey proqram başladıqdan sonra baş verir, heç bir proqram isə başlamadı.
Konfiqurasiya xətası kimi görünən başlanğıc mesajı
exec format uğursuzluğu tətbiqin heç bir parametrini oxumasından əvvəl yükləyicidən gəlir. Buna görə heç bir konfiqurasiya xəbərdarlığı və heç bir tunel jurnalı yaratmır, çünki onları yazacaq canlı proses yoxdur. Uğursuzluq həm də qeyri-adi dərəcədə sürətlidir, çox vaxt konteyner jurnalında heç bir sətir görünməmişdən əvvəl. Eyni qısa mesaj ikili faylın başqa arxitektura, başqa əməliyyat sistemi üçün olmasından və ya zədələnməsindən asılı olmayaraq görünür.
İcra mühitini və arxitekturanı dəqiq obraz istinadı ilə birlikdə qeyd edin, sonra həmin istinadın həqiqətən nə təklif etdiyini yoxlayın. Docker Desktop-da konteyner platforması noutbuka deyil, Linux virtual maşınına aiddir, ona görə yalnız host arxitekturası yanıldıcı ola bilər. Bu istinad üçün indeks girişlərinin siyahısını oxuyun, onun tag səhifəsindəki marketinq mətnini deyil.
İcra əmrindən əvvəl obraz indeksini oxuyun
Reestr çoxplatformalı istinad yayımladıqda, tag bir indeksə işarə edir və hər giriş öz daycesti olan bir platforma adlandırır. Nəzərdən keçirilən istinadı yoxlayın, qonşu tagı deyil, və indeksin nəyi ehtiva etdiyini fərz etmək əvəzinə onu oxuyun.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
Birinci əmr istinadın yayımladığı platformaları sadalayır. İkincisi yerli olaraq artıq mövcud olan obrazın platformasını bildirir, icra mühiti məhz onu işlədəcək. Yalnız bir girişi olan istinad hər hostun eyni ikili faylı aldığını bildirir və tag heç vaxt qurulmadığı maşına kömək edə bilməz.
Etiketlər variantı seçir; onu yaratmır
Çoxplatformalı indeks icra mühitinə uyğun girişi seçməyə imkan verir, bu həqiqətən rahatdır və tez-tez portativliklə səhv salınır. Seçim axtarışdır, tərcümə deyil: variant yoxdursa, seçiləcək heç nə yoxdur. Buna görə eyni tag iki hostda iki fərqli ikili fayla çevrilə bilər və bir hostda heç bir yararlı şeyə çevrilmir.
Daycest ilə bərkitmə qeyri-müəyyənliyi aradan qaldırır və sonrakı baxışı da mümkün edir, çünki daycest sınaqdan keçirilmiş baytları dəqiq müəyyən edir. Həmin daycesti yerləşdirmə qeydi ilə saxlayın, təsadüfən cari olan tag-a güvənməyin.
Emulyasiya bir tənzimləmədir, tərcümə qatı deyil
Dəstəklənən icra mühiti vasitəsilə emulyasiya bəzi qeyri-doğma istifadəçi sahəsi yüklərini işlədə bilər, ona görə bir arxitekturanın heç vaxt digərinin obrazını işlədə bilməyəcəyi barədə mütləq iddia yanlışdır. Bu da ümumi bir həll deyil. Emulyasiya edilmiş icranın fərqli performans xüsusiyyətləri var və başlayan əhəmiyyətsiz bir proses tunel yükünün məqbul davranıb-davranmadığını demir.
Docker-in çoxplatformalı bələdçisi doğma qurmaları, çarpaz kompilyasiyanı və emulyasiyanı ayrı strategiyalar kimi qəbul edir, bu da seçimləri oxumağın düzgün yoludur. Birini qəsdən seçin və ekvivalentliyi fərz etmək əvəzinə VPN yükünü onun altında qiymətləndirin.
İcazələr başqa bir problemi həll edir
Şəbəkə idarəetməsi qabiliyyəti vermək və ya TUN cihazını ötürmək uyğunsuz icra edilə bilən faylı işlədə bilməz. Bunlar işləyən prosesin istifadə etdiyi icra icazələridir; faylı artıq rədd etmiş yükləyici üçün görünməzdirlər.
Əksi də eyni dərəcədə doğrudur. Doğma ikili fayl imtiyazlar, cihaz girişi, həlledici inteqrasiyası və ya tunelin ehtiyac duyduğu yenidən başlatma siyasəti barədə heç nə sübut etmir, ona görə başlayan konteyner hələ işləyən konteyner deyil. Əvvəlcə platforma müqaviləsini qurun, sonra sənədləşdirilmiş seçimləri ilə icra müqaviləsinə keçin.
Obraz daycestini, dəstəklənən hədəfi və konfiqurasiyanı eyni qeyddə birlikdə saxlayın. Arxitekturanı səssizcə dəyişən tag yeniləməsini, əvvəlki daycest yazılı olduqda, yeganə əlamət tanış bir xəta və sazlamaya sərf olunmuş təzə bir günorta olduqda aşkar etməkdən daha asan tutmaq olar.