VPN konteyneri 'exec format error' ile çıkıyor: yanlış platform
'exec format error' ikili dosyanın başka bir CPU için derlendiği anlamına gelir, NET_ADMIN eksik olduğu değil. Rotaları veya kimlik bilgilerini düzenlemeden önce imaj dizinini okuyun.
Hemen exec format error ile çıkan konteynerler yanlış içgüdüyü tetikler: yetenek eklemek, aygıt bağlamak, tünel yapılandırmasını düzenlemek. Bunların hiçbiri soruna ulaşmaz. Çekirdek ikili dosyayı hiç çalıştıramadı, bu da bir konteynerde neredeyse her zaman imajın ana makineden farklı bir CPU mimarisini hedeflediği anlamına gelir. Yönlendirme, kimlik bilgileri veya ayrıcalıklarda değiştirebileceğiniz her şey bir program başladıktan sonra gerçekleşir ve hiçbir program başlamadı.
Yapılandırma hatası gibi görünen başlangıç mesajı
exec biçimi hatası, uygulama tek bir ayarı bile okumadan önce yükleyiciden gelir. Bu yüzden hiçbir yapılandırma uyarısı ve hiçbir tünel günlüğü üretmez, çünkü bunları yazacak canlı bir süreç yoktur. Hata aynı zamanda şaşırtıcı derecede hızlıdır, çoğu zaman konteyner günlüğünde tek bir satır bile görünmeden önce. Aynı kısa mesaj, ikili dosya başka bir mimari için, başka bir işletim sistemi için ya da bozuk olsa da görünür.
Çalışma ortamını ve mimarisini tam imaj başvurusuyla birlikte kaydedin, ardından bu başvurunun gerçekte ne sunduğunu kontrol edin. Docker Desktop'ta konteyner platformu dizüstü bilgisayara değil Linux sanal makinesine aittir, bu yüzden yalnızca ana makine mimarisi yanıltıcı olabilir. Bu başvuru için dizin girişlerinin listesini okuyun, etiket sayfasındaki pazarlama metnini değil.
Çalıştırma komutundan önce imaj dizinini okuyun
Bir kayıt defteri çok platformlu bir başvuru yayımladığında, etiket bir dizini işaret eder ve her giriş kendi özeti olan bir platformu adlandırır. İncelenen başvuruyu kontrol edin, komşu bir etiketi değil, ve içinde ne olduğunu varsaymak yerine dizini okuyun.
docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4
İlk komut, başvurunun yayımladığı platformları listeler. İkincisi, zaten yerel olarak bulunan imajın platformunu bildirir ve çalışma zamanının çalıştıracağı tam olarak budur. Tek girişli bir başvuru, her ana makinenin aynı ikili dosyayı aldığı anlamına gelir ve etiket, hiç oluşturulmadığı bir makineye yardımcı olamaz.
Etiketler bir varyant seçer; onu oluşturmaz
Çok platformlu bir dizin, çalışma zamanının eşleşen bir giriş seçmesine izin verir; bu gerçekten kullanışlıdır ve sıklıkla taşınabilirlikle karıştırılır. Seçim bir aramadır, çeviri değil: varyant yoksa seçilecek bir şey de yoktur. Bu yüzden aynı etiket iki ana makinede iki farklı ikili dosyaya yol açabilir ve bir ana makinede kullanılabilir hiçbir şeye yol açmaz.
Özet ile sabitleme belirsizliği ortadan kaldırır ve daha sonra incelemeyi de mümkün kılar, çünkü özet test edilen baytları tam olarak tanımlar. Bu özeti dağıtım kaydıyla birlikte saklayın, o anda geçerli olan etikete güvenmek yerine.
Öykünme bir düzenlemedir, çeviri katmanı değil
Desteklenen bir çalışma zamanı aracılığıyla öykünme, bazı yerel olmayan kullanıcı alanı iş yüklerini çalıştırabilir, bu yüzden bir mimarinin asla diğerinin imajını çalıştıramayacağına dair mutlak iddia yanlıştır. Genel bir çözüm de değildir. Öykünülmüş yürütme farklı performans özelliklerine sahiptir ve başlayan önemsiz bir süreç, bir tünel iş yükünün kabul edilebilir davranıp davranmadığı hakkında hiçbir şey söylemez.
Docker'ın çok platformlu kılavuzu yerel derlemeleri, çapraz derlemeyi ve öykünmeyi ayrı stratejiler olarak ele alır ve seçenekleri okumanın doğru yolu budur. Birini bilinçli olarak seçin ve eşdeğerlik varsaymak yerine VPN iş yükünü onun altında doğrulayın.
İzinler farklı bir sorunu çözer
Ağ yönetimi yeteneği vermek veya bir TUN aygıtını geçirmek, uyumsuz bir çalıştırılabilir dosyayı çalıştıramaz. Bunlar çalışan bir sürecin kullandığı çalışma zamanı izinleridir; dosyayı zaten reddetmiş bir yükleyici için görünmezdirler.
Bunun tersi de aynı derecede doğrudur. Yerel bir ikili dosya, ayrıcalıklar, aygıt erişimi, çözümleyici entegrasyonu veya tünelin ihtiyaç duyduğu yeniden başlatma ilkesi hakkında hiçbir şey kanıtlamaz, bu yüzden başlayan bir konteyner henüz çalışan bir konteyner değildir. Önce platform sözleşmesini kurun, ardından belgelenmiş seçenekleriyle çalışma zamanı sözleşmesine geçin.
İmaj özetini, desteklenen hedefi ve yapılandırmayı aynı kayıtta birlikte tutun. Mimariyi sessizce değiştiren bir etiket güncellemesini yakalamak, önceki özet yazılı olduğunda, tek belirti tanıdık bir hata ve hata ayıklamaya harcanan yeni bir öğleden sonra olduğunda olduğundan daha kolaydır.