VPN контейнер 'exec format error'-той гарч байна: буруу платформ
'exec format error' нь хоёртын файл өөр CPU-д зориулагдсан гэсэн үг, NET_ADMIN дутуу гэсэн үг биш. Маршрут эсвэл итгэмжлэл засахын өмнө зургийн индексийг уншина уу.
exec format error-той шууд гарч байгаа контейнерууд буруу инстинктийг төрүүлдэг: чадвар нэмэх, төхөөрөмж холбох, туннелийн тохиргоог засах. Эдгээрийн аль нь ч асуудалд хүрэхгүй. Цөм хоёртын файлыг огт ажиллуулж чадсангүй, энэ нь контейнерт бараг үргэлж зураг хостоос өөр CPU архитектур руу чиглэсэн гэсэн үг. Маршрут, итгэмжлэл эсвэл эрх мэдэл дээр таны өөрчилж болох бүх зүйл програм эхэлсний дараа болдог, гэхдээ нэг ч програм эхлээгүй.
Тохиргооны алдаа мэт харагдах эхлэлийн мэдээ
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 бичигдсэн үед барих нь илүү хялбар, харин цорын ганц шинж тэмдэг нь танил алдаа, дибаг хийхэд зарцуулсан шинэ үдээс хойш байх үед хэцүү.