在X86机器上运行ARM镜像容器
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

在X86机器上运行ARM镜像容器

yuc
yuc
2025-04-22 / 最后修改: 2025-04-22 08:36 / 0 评论 / 6 阅读 / 正在检测是否收录...
需求背景

某项目提供的环境是基于容器的,无法使用 docker on docker 来运行服务了,所以需要从现有的arm版本容器镜像中提取出指定文件来直接运行

方案分析

短时间购买服务器不太现实,再就是原镜像比较大,大约有 16G,购买一台ARM云主机部署可行,但是上传文件的时间成本不低

所以第二个方案是尝试在现有的X86服务器上运行ARM版本的容器镜像,经过初步的检索,这个方案貌似可行

安装步骤

实现这个需求,主要是通过 qemu 模拟 ARM 来实现,参考文档

https://github.com/multiarch/qemu-user-static/
  1. 安装依赖
# 前提已经安装了 docker,这里直接安装 qemu 相关的依赖包
yum install -y  \
qemu-system-arm qemu qemu-user qemu-kvm qemu-kvm-tools libvirt virt-install \
libvirt-python libguestfs-tools-c
  1. 运行容器
docker run --rm --privileged multiarch/qemu-user-static --reset
# 这个命令会设置宿主机相关配置,让后续ARM相关的程序能够解释执行
$ cat /proc/sys/fs/binfmt_misc/qemu-$arch
enabled
interpreter /usr/bin/qemu-$arch-static
flags: F
offset 0
magic 7f454c460201010000000000000000000200b700
mask ffffffffffffff00fffffffffffffffffeffffff
# 要保证 interpreter 指定的文件路径存在,如果没有文件则去参考站点下载放入
  1. 拉取目标镜像
# 要注意指定 linux/arm64 否则会自动根据宿主机的架构来拉取
docker pull --platform linux/arm64  IMAGE
  1. 启动目标镜像
docker run --rm -it -d  -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static IMAGE
  1. 确定启动状态
# docker容器在运行状态即是成功
docker ps -a
模拟错误

如果出现以下错误,说明并成功模拟成功目的架构:

  • 在启动容器后接任何命令都提示 exec /bin/bash: no such file or directory
  • 报错 exec format error
  • 启动后查看状态是退出
0

评论

博主关闭了当前页面的评论