Score:0

การย้ายคอนเทนเนอร์นักเทียบท่าจากเซิร์ฟเวอร์ที่ใช้ linux ไปยัง AWS

ธง in

ฉันกำลังพยายามย้ายคอนเทนเนอร์ที่ทำงานบนเซิร์ฟเวอร์ที่ใช้ linux ไปยัง AWS ฉันกำลังกระทำการโหลดการบันทึก

หลังจากกระทำการบันทึกโหลดแล้ว ภาพนักเทียบท่าจะถูกสร้างขึ้น ฉันรันอิมเมจนักเทียบท่านี้โดยใช้คำสั่ง

นักเทียบท่าเรียกใช้ <image_name>

แต่ฉันได้รับข้อผิดพลาดต่อไปนี้

แพลตฟอร์มของอิมเมจที่ร้องขอ (linux/amd64) ไม่ตรงกับ ตรวจพบแพลตฟอร์มโฮสต์ (linux/arm64/v8) และไม่มีแพลตฟอร์มเฉพาะ ร้องขอ

standard_init_linux.go:228: กระบวนการของผู้ใช้ exec เกิดจาก: รูปแบบ exec ข้อผิดพลาด

ฉันพยายามเรียกใช้อิมเมจนักเทียบท่าโดยใช้

นักเทียบท่ารัน --platform linux/amd64 <image_name>

แม้ว่านั่นจะไม่ได้ช่วยแก้ปัญหา มีข้อผิดพลาดเดียวกัน

Score:1
ธง ca

คุณไม่สามารถรันอิมเมจ amd64 (เพื่อให้แม่นยำยิ่งขึ้น ไดเร็กต์ของอิมเมจแบบเดียวกัน) บนแพลตฟอร์ม ARM แม้ว่าอิมเมจที่ใช้จะอิงจากหลายแพลตฟอร์มก็ตาม

กล่าวอีกนัยหนึ่งจะไม่ทำงานกับขั้นตอนการส่ง / บันทึก / โหลด

ตัวภาพเองมักจะต้องสร้าง (นักเทียบท่า buildx สร้าง -- แพลตฟอร์ม linux/arm64/v8,linux/amd64,...) ตาม Dockerfile สำหรับทุกแพลตฟอร์มเป้าหมาย

ในกรณีที่คุณไม่มี Dockerfile (นิสัยไม่ดี) คุณสามารถลองวิศวกรรมย้อนกลับ Dockerfile จากรูปภาพ (ในระดับหนึ่ง) โดยใช้ ประวัตินักเทียบท่า และ/หรือ https://github.com/mrhavens/Dedockify

แม้ว่า buildx จะเป็นวิธีที่ถูกต้อง แต่คุณสามารถทำได้ - เพื่อความง่าย - เพียงแค่ legacy-build (สร้างนักเทียบท่า) อิมเมจโดยตรงบนเครื่อง aws ARM ของคุณ หากคุณต้องการให้มันทำงานทันทีและรวดเร็ว

(ยังต้องใช้ Dockerfile อยู่ แปลงรูปภาพเป็นแพลตฟอร์มอื่นไม่ได้)

sgohl avatar
ca flag
ฉันจะไม่พูดถึงมันในคำตอบ แต่ถ้าคุณเลือกแพลตฟอร์ม ARM โดยบังเอิญ ให้เปิดเครื่อง x86_64 (ประเภทอินสแตนซ์ที่ไม่ใช่ a*)
The Beast avatar
in flag
อ๋อ..เข้าใจแล้ว. ขอบคุณ
The Beast avatar
in flag
มีวิธีสร้างอิมเมจ Multi-Architecture Docker จากคอนเทนเนอร์หรือไม่?
Score:0
ธง cn

หากคุณติดตั้ง คิวมู บนเครื่อง AWS Arm คุณอาจเรียกใช้อิมเมจ x86_64 ได้ แต่จะอยู่บน CPU จำลองซึ่งจะมีค่าใช้จ่ายสูงในด้านประสิทธิภาพ

สมมติว่าเครื่องโฮสต์ที่ใช้ Debian/Ubuntu

sudo apt-get install qemu binfmt-support qemu-user-static 
docker run --rm --privileged multiarch/qemu-user-static --reset -p ใช่
นักเทียบท่ารัน --platform linux/amd64 <image_name>

คำสั่งแรกติดตั้งเลเยอร์อีมูเลเตอร์ คำสั่งที่สองบอกเคอร์เนลว่าจะหาอีมูเลเตอร์เพื่อเรียกใช้คอนเทนเนอร์ได้ที่ไหน คุณจะต้องทำขั้นตอนที่สองทุกครั้งที่รีบูตเครื่องโฮสต์

ตามที่ระบุไว้ทั้งที่นี่และในคำถามอื่นของคุณ ถูกต้อง สิ่งที่ต้องทำคือใช้ Dockerfile เพื่อสร้างคอนเทนเนอร์ของคุณ เนื่องจากวิธีนี้คุณจะมีวิธีสร้างคอนเทนเนอร์ซ้ำสำหรับสถาปัตยกรรมใดๆ ที่คุณต้องการ (คุณสามารถใช้ขั้นตอนที่ฉันกล่าวถึงข้างต้นเพื่อสร้างอิมเมจสำหรับ Arm64 บนเครื่อง X86_64 ของคุณ ตามที่อธิบายไว้ ที่นี่)

The Beast avatar
in flag
เข้าใจแล้ว .. ขอบคุณ
cn flag
@TheBeast https://serverfault.com/help/someone-answers

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา