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 жазылганда кармоо оңой, ал эми жалгыз белги тааныш ката жана жөндөөгө жумшалган жаңы түштөн кийинки убакыт болгондо кыйыныраак.

Тектеш макалалар