Puncte:0

Mutarea containerului docker de la serverul bazat pe Linux la AWS

drapel in

Încerc să mut un container care rulează pe un server bazat pe Linux în AWS. Fac un commit-save-load.

După ce faceți o încărcare commit-save-load, este creată o imagine Docker. Apoi am rulat această imagine Docker folosind comanda

rulați docker <nume_imagine>

Dar primesc următoarea eroare

Platforma imaginii solicitate (linux/amd64) nu se potrivește cu platforma gazdă detectată (linux/arm64/v8) și nicio platformă specifică nu a fost solicitat

standard_init_linux.go:228: procesul utilizatorului exec cauzat: format exec eroare

Am încercat să rulez imaginea docker folosind

docker run --platform linux/amd64 <nume_imagine>

Nici măcar asta nu a rezolvat problema. Am aceeași eroare

Puncte:1
drapel ca

Nu puteți rula pur și simplu o imagine amd64 (mai precis, același digest al imaginii) pe o platformă ARM, chiar dacă imaginea pe care se bazează este multiplatformă.

cu alte cuvinte, nu va funcționa cu procedura commit/save/load.

De obicei, imaginea în sine trebuie să fie construită (docker buildx build --platform linux/arm64/v8,linux/amd64,...) bazat pe un Dockerfile pentru fiecare platformă țintă.

În cazul în care nu aveți Dockerfile (obiceiuri proaste), puteți încerca să faceți inginerie inversă a Dockerfile dintr-o imagine (la un anumit nivel) folosind istoricul docker și/sau https://github.com/mrhavens/Dedockify

Deși buildx este modul corect de a face acest lucru, puteți - pentru simplitate - doar legacy-build (docker build) imaginea direct pe mașina dvs. aws ARM dacă doriți doar să o rulați o dată și rapid

(încă necesită un Dockerfile â nu este posibil să convertiți o imagine pe altă platformă)

sgohl avatar
drapel ca
Nu l-aș menționa în răspuns, dar dacă ați ales platforma ARM din întâmplare, lansați o mașină x86_64 (orice tip de instanță non a*)
The Beast avatar
drapel in
Oh.. înțeles. Mulțumiri
The Beast avatar
drapel in
Există o modalitate de a construi o imagine Multi-Arhitecture Docker dintr-un container?
Puncte:0
drapel cn

Daca instalezi Qemu pe mașina AWS Arm ați putea rula imaginea x86_64, dar aceasta va fi pe un procesor emulat care va avea o suprasarcină mare asupra performanței.

Presupunând o mașină gazdă bazată pe Debian/Ubuntu

sudo apt-get install qemu binfmt-support qemu-user-static 
docker run --rm --privileged multiarch/qemu-user-static --reset -p da
docker run --platform linux/amd64 <nume_imagine>

Prima comandă instalează stratul de emulare, a doua spune nucleului unde să găsească emulatorii în care să ruleze containerul, va trebui să faceți al doilea pas de fiecare dată când mașina gazdă este repornită.

După cum s-a spus atât aici, cât și la cealaltă întrebare, corect lucru de făcut este să utilizați un Dockerfile pentru a vă construi containerele, deoarece astfel veți avea o modalitate repetabilă de a vă construi containerul pentru orice arhitectură de care aveți nevoie (puteți folosi și pașii pe care i-am menționat mai sus pentru a construi imaginea pentru Arm64 pe mașina dvs. X86_64). așa cum este descris Aici)

The Beast avatar
drapel in
Am înțeles... mulțumesc
drapel cn
@TheBeast https://serverfault.com/help/someone-answers

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.