Kontit, jotka päättyvät heti exec format error-virheeseen, houkuttelevat väärään vaistoon: lisää ominaisuus, liitä laite, muokkaa tunnelin kokoonpanoa. Mikään niistä ei osu ongelmaan. Ydin ei voinut suorittaa binääriä lainkaan, mikä kontissa tarkoittaa lähes aina sitä, että kuva on tarkoitettu eri suoritinarkkitehtuurille kuin isäntä. Kaikki, mitä voisit muuttaa reitityksessä, tunnistetiedoissa tai käyttöoikeuksissa, tapahtuu sen jälkeen, kun ohjelma on käynnistynyt, eikä mikään ohjelma käynnistynyt.

Käynnistysviesti, joka näyttää kokoonpanovirheeltä

Exec-muodon epäonnistuminen tulee lataajalta, ennen kuin sovellus lukee yhtäkään asetusta. Siksi se ei tuota kokoonpanovaroituksia eikä tunnelilokia, koska ei ole elävää prosessia, joka kirjoittaisi ne. Epäonnistuminen on myös huomattavan nopeaa, usein ennen kuin kontin lokiin ilmestyy yhtään riviä. Sama lyhyt viesti ilmestyy riippumatta siitä, onko binääri toiselle arkkitehtuurille, toiselle käyttöjärjestelmälle vai vaurioitunut.

Kirjaa suoritusympäristö ja arkkitehtuuri yhdessä tarkan kuvaviitteen kanssa ja tarkista sitten, mitä kyseinen viite todella tarjoaa. Docker Desktopissa kontin alusta kuuluu Linuxin virtuaalikoneelle eikä kannettavalle, joten pelkkä isännän arkkitehtuuri voi johtaa harhaan. Lue tämän viitteen indeksitietueet sen tag-sivun markkinointitekstin sijaan.

Lue kuvaindeksi ennen suorituskomentoa

Kun rekisteri julkaisee monialustaisen viitteen, tag osoittaa indeksiin ja jokainen tietue nimeää alustan omalla digestillään. Tarkastele käsillä olevaa viitettä, älä naapuritagia, ja lue indeksi sen sijaan että olettaisit sen sisällön.

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

Ensimmäinen komento luettelee alustat, jotka viite julkaisee. Toinen raportoi paikallisesti jo olevan kuvan alustan, ja juuri sen suoritusympäristö suorittaa. Viite, jossa on vain yksi tietue, tarkoittaa, että jokainen isäntä saa saman binäärin, eikä tag voi auttaa konetta, jolle sitä ei koskaan rakennettu.

Tagit valitsevat variantin; ne eivät luo sitä

Monialustainen indeksi antaa suoritusympäristön valita sopivan tietueen, mikä on todella kätevää ja usein sekoitetaan siirrettävyyteen. Valinta on haku, ei käännös: jos variantti puuttuu, ei ole mitään valittavaa. Sama tag voi siis kahdella isännällä johtaa kahteen eri binääriin, ja yhdellä isännällä se ei johda mihinkään käyttökelpoiseen.

Digestillä kiinnittäminen poistaa epäselvyyden ja mahdollistaa myös myöhemmän tarkastelun, koska digest yksilöi täsmälleen testatut tavut. Säilytä digest käyttöönottotietueen kanssa sen sijaan, että luottaisit tagiin, joka sattui olemaan voimassa.

Emulointi on järjestely, ei käännöskerros

Tuetun suoritusympäristön kautta emulointi voi suorittaa joitakin ei-natiiveja käyttäjäavaruuden kuormia, joten ehdoton väite, että yksi arkkitehtuuri ei voi koskaan suorittaa toisen kuvaa, on väärä. Se ei ole myöskään yleinen ratkaisu. Emuloidulla suorituksella on erilaiset suorituskykyominaisuudet, eikä triviaali käynnistyvä prosessi kerro mitään siitä, käyttäytyykö tunnelikuorma hyväksyttävästi.

Dockerin monialustainen opas käsittelee natiiveja koontiversioita, ristikäännöstä ja emulointia erillisinä strategioina, ja se on oikea tapa lukea vaihtoehtoja. Valitse yksi tarkoituksella ja kvalifioi VPN-kuorma sen alla sen sijaan, että olettaisit vastaavuuden.

Käyttöoikeudet ratkaisevat eri ongelman

Verkonhallintakyvyn myöntäminen tai TUN-laitteen läpäiseminen ei voi saada yhteensopimatonta suoritettavaa tiedostoa toimimaan. Nämä ovat suoritusympäristön oikeuksia, joita käynnissä oleva prosessi käyttää; ne ovat näkymättömiä lataajalle, joka on jo hylännyt tiedoston.

Päinvastainen on yhtä totta. Natiivi binääri ei todista mitään käyttöoikeuksista, laitekäytöstä, resolverin integraatiosta tai uudelleenkäynnistyskäytännöstä, jonka tunneli tarvitsee, joten käynnistyvä kontti ei ole vielä toimiva kontti. Vahvista ensin alustasopimus ja siirry sitten suoritussopimukseen sen dokumentoitujen vaihtoehtojen kanssa.

Säilytä kuvan digest, tuettu kohde ja kokoonpano yhdessä samassa tietueessa. Tagin päivitys, joka hiljaa muuttaa arkkitehtuuria, on helpompi havaita, kun edellinen digest on kirjattu, kuin kun ainoa oire on tuttu virhe ja tuore iltapäivä virheenetsintää.

Aiheeseen liittyvät artikkelit