Kontena yang keluar serta-merta dengan exec format error menimbulkan naluri yang salah: tambah keupayaan, lekapkan peranti, edit konfigurasi terowong. Tiada satu pun daripada itu mencapai masalah. Kernel tidak dapat melaksanakan binari itu langsung, yang dalam kontena hampir selalu bermakna imej menyasarkan seni bina CPU yang berbeza daripada hos. Semua yang mungkin anda ubah pada penghalaan, kelayakan atau keistimewaan berlaku selepas program dimulakan, dan tiada program dimulakan.

Mesej permulaan yang kelihatan seperti ralat konfigurasi

Kegagalan format exec datang daripada pemuat, sebelum aplikasi membaca satu tetapan pun. Itulah sebabnya ia tidak menghasilkan sebarang amaran konfigurasi atau log terowong, kerana tiada proses hidup untuk menulisnya. Kegagalan itu juga amat pantas, selalunya sebelum apa-apa baris muncul dalam log kontena. Mesej pendek yang sama muncul sama ada binari itu untuk seni bina lain, untuk sistem pengendalian lain atau rosak.

Catat persekitaran masa jalan dan seni bina bersama rujukan imej yang tepat, kemudian semak apa yang sebenarnya ditawarkan oleh rujukan itu. Pada Docker Desktop platform kontena milik mesin maya Linux dan bukan komputer riba, jadi seni bina hos sahaja boleh mengelirukan. Baca senarai entri indeks untuk rujukan ini, bukan teks pemasaran pada halaman tag-nya.

Baca indeks imej sebelum arahan larian

Apabila registry menerbitkan rujukan berbilang platform, tag menunjuk kepada indeks, dan setiap entri menamakan platform dengan digestnya sendiri. Periksa rujukan yang sedang dikaji dan bukan tag jiran, dan baca indeks itu daripada menganggap isinya.

docker buildx imagetools inspect ghcr.io/example/vpn:1.4
docker image inspect --format '{{.Os}}/{{.Architecture}}' ghcr.io/example/vpn:1.4

Arahan pertama menyenaraikan platform yang diterbitkan oleh rujukan itu. Yang kedua melaporkan platform imej yang sudah ada secara setempat, dan itulah yang akan dijalankan oleh masa jalan. Rujukan dengan hanya satu entri bermakna setiap hos menerima binari yang sama, dan tag itu tidak dapat membantu mesin yang tidak pernah dibina untuknya.

Tag memilih varian; ia tidak menciptanya

Indeks berbilang platform membolehkan masa jalan memilih entri yang sepadan, yang benar-benar mudah dan sering disalah anggap sebagai kemudahalihan. Pemilihan itu carian, bukan terjemahan: jika varian tiada, tiada apa untuk dipilih. Oleh itu tag yang sama pada dua hos boleh menghasilkan dua binari berbeza, dan pada satu hos ia tidak menghasilkan apa-apa yang boleh digunakan.

Penyematan melalui digest menghapuskan kekaburan dan juga membolehkan semakan kemudian, kerana digest mengenal pasti dengan tepat bait yang diuji. Simpan digest itu bersama rekod penggunaan, daripada bergantung pada tag yang kebetulan semasa.

Emulasi ialah susunan, bukan lapisan terjemahan

Emulasi melalui masa jalan yang disokong boleh menjalankan sesetengah beban kerja ruang pengguna bukan asli, jadi dakwaan mutlak bahawa satu seni bina tidak akan pernah dapat menjalankan imej seni bina lain adalah salah. Ia juga bukan penyelesaian umum. Pelaksanaan teremulasi mempunyai ciri prestasi yang berbeza, dan proses remeh yang bermula tidak memberitahu anda apa-apa tentang sama ada beban kerja terowong berkelakuan dengan wajar.

Panduan berbilang platform Docker menganggap binaan asli, penyusunan silang dan emulasi sebagai strategi berasingan, dan itulah cara yang betul untuk membaca pilihan itu. Pilih satu dengan sengaja, dan nilai beban kerja VPN di bawahnya daripada menganggap kesetaraan.

Kebenaran menyelesaikan masalah yang berbeza

Memberi keupayaan pentadbiran rangkaian atau menyalurkan peranti TUN tidak boleh membuat fail boleh laksana yang tidak serasi berjalan. Ini kebenaran masa jalan yang digunakan oleh proses yang berjalan; ia tidak kelihatan kepada pemuat yang sudah menolak fail itu.

Sebaliknya juga sama benar. Binari asli tidak membuktikan apa-apa tentang keistimewaan, akses peranti, integrasi resolver atau dasar mula semula yang diperlukan oleh terowong, jadi kontena yang bermula belum lagi kontena yang berfungsi. Tetapkan kontrak platform dahulu, kemudian beralih kepada kontrak masa jalan dengan pilihan yang didokumenkan.

Simpan digest imej, sasaran yang disokong dan konfigurasi bersama dalam rekod yang sama. Kemas kini tag yang menukar seni bina secara senyap lebih mudah ditangkap apabila digest sebelumnya ditulis, berbanding apabila satu-satunya gejala ialah ralat biasa dan petang baharu untuk menyahpepijat.

Artikel berkaitan