VPN контејнер излази са 'exec format error': погрешна платформа
'exec format error' значи да је бинарни фајл направљен за други процесор, а не да недостаје NET_ADMIN. Прочитајте индекс слике пре измене рута или акредитива.
Контејнери који одмах излазе са exec format error изазивају погрешан инстинкт: додавање могућности, монтирање уређаја, измена конфигурације тунела. Ниједно од тога не стиже до проблема. Језгро уопште није могло да изврши бинарни фајл, што у контејнеру скоро увек значи да је слика намењена другој архитектури процесора од оне на домаћину. Све што бисте могли да промените у рутирању, акредитивима или привилегијама дешава се након што програм почне, а ниједан програм није почео.
Порука при покретању која изгледа као грешка у конфигурацији
Неуспех формата 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 записан, него када је једини симптом позната грешка и ново поподне проведено у отклањању грешака.