记一次在amd架构打包arm64架构的镜像的试错经历

前提

在amd架构打包了一个镜像,放在arm64架构服务器上可以load ,但是run的时候报平台不兼容的问题。

运行如下命令查看发现 架构属于 amd64 如下:

bash 复制代码
docker inspect 镜像ID

需要生成一个arm的镜像才能运行。

尝试

首先Dockerfile 的FROM 基础镜像就的是arm的,在dockerhub 查找带arm标签的相关镜像,

bash 复制代码
docker pull arm64v8/ubuntu:20.04

或者采用如下命令拉取

bash 复制代码
docker pull --platform arm64 python:3.10.8

即使有了arm的镜像,你会发现当你docker run 的时候依旧无法启动,或者你想直接运行Dockerfile构建,注意build时需要指定平台:

bash 复制代码
sudo docker buildx build --platform linux/arm64 -t zhonghang:V1.0 .

但是当执行到 RUN pip install XXX 竟然报错。。。也就是amd平台无法启动arm的镜像。于是放弃此方式。

解决

X86_64平台运行Arm docker容器

QEMU是什么

QEMU是一个通用的开源的跨平台仿真模拟器,提供user和system两种模式。其模拟的作用可是可以模拟在特定的体系结构下的应用的执行或者构建,比如在x86的体系结构的操作系统上运行ARM的应用。

常见问题的场景

在ARM体系结构的硬件环境中安装Docker,然后构建并运行ARM的镜像自然非常简单,但是如果没有ARM环境,只有x86的机器又想做这件事情,这时QEMU也就有了用武之地,比如用友的技术中台似乎就是通过QEMU来模拟ARM硬件进行模拟。

step 1 获取QEMU

使用它的原因是宿主的环境不是ARM架构,导致容器无法运行,所以需要QEMU来虚拟出Arm的架构。

下载地址:https://github.com/multiarch/qemu-user-static/releases

step 2

bash 复制代码
sudo cp qemu-aarch64-static /usr/bin/
sudo chmod +x /usr/bin/qemu-aarch64-static

step3 注册QEMU虚拟机

bash 复制代码
docker run --rm --privileged multiarch/qemu-user-static:register

step 4 创建Arm容器

bash 复制代码
docker run --rm -it \
-v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
arm64v8/ubuntu:20.04 \
bash

step 5 检查

bash 复制代码
root@8674accc718a:/# uname -m
aarch64

此时就可以启动了,然后进去安装环境,最后commit 即可。

相关推荐
海宇服务3 小时前
零信任架构实战:基于海宇运营商近3个月欠费次数构建自动化履约能力评估管线
运维·人工智能·架构·自动化
代码方舟4 小时前
零信任架构实战:基于天远学历信息高级版构建自动化智库入驻审查网关
运维·人工智能·架构·自动化
mftang5 小时前
EtherCAT协议:从“飞读飞写”机制到分布式时钟同步的实时以太网架构深度解析
分布式·架构·ethercat·分布式时钟·从站控制器
Dawson Zhu6 小时前
智能体记忆系统:原理解析与工程实践
人工智能·语言模型·架构·aigc·agi
AOI小白新手上路7 小时前
韦东山《ARM 架构与编程》基于I.MX6ULL 3-1 硬件知识_LED 原理图 · 学习笔记
arm开发·学习·架构
诚心呈意共享外卖配送系统8 小时前
共享骑手与聚合配送的区别及系统架构设计:运力池与订单聚合如何落地
架构·系统架构·创业创新
天远API8 小时前
零信任架构实战:基于天远股权穿透构建自动化供应链授信穿透网关
java·人工智能·架构·自动化
Dawson Zhu9 小时前
大语言模型对齐与微调:原理解析与工程实践
人工智能·语言模型·架构·aigc·agi
姜鱼问生10 小时前
uptime-kuma 从 docker run 迁移到 compose:数据卷的坑
安全·架构
weixin_3077791310 小时前
从“人操作仪器”到“Agent 自主发现”:OPL 金属材料自驱动实验室 MVP 技术论述
开发语言·人工智能·算法·架构