Linux在x86环境下制作ARM镜像包

server/2025/2/8 21:19:58/

在x86环境下制作ARM镜像包(如qemu.docker),可以通过QEMU和Docker的结合来实现。以下是详细的步骤:

安装QEMU-user-static

QEMU-user-static是一个静态编译的QEMU二进制文件,用于在非目标架构上运行目标架构的二进制文件。首先需要在x86主机上安装并配置QEMU-user-static。

运行以下命令来安装并配置QEMU-user-static:

bash复制

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes或docker run --rm --privileged multiarch/qemu-user-static:register# 需要提前准备交叉编译环境,下载qemu-aarch64-static,并给qemu-aarch64-static提前赋予执行权限chmod +x qemu-aarch64-static

此命令会自动下载multiarch/qemu-user-static镜像,并将其注册到binfmt_misc,使QEMU能够模拟不同架构的程序。

下载镜像错误,提示信息如下

[root@localhost DockerFile]# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
Unable to find image 'multiarch/qemu-user-static:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.

错误修复(更换docker镜像加速器)

[root@localhost DockerFile]# cd /etc/docker
[root@localhost docker]# ll
total 0
[root@localhost docker]# cat /etc/docker/daemon.json
cat: /etc/docker/daemon.json: No such file or directory
[root@localhost docker]# sudo mkdir -p /etc/docker
[root@localhost docker]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://docker.m.daocloud.io"]
> }
> EOF
{"registry-mirrors": ["https://docker.m.daocloud.io"]
}
[root@localhost docker]# sudo systemctl daemon-reload
[root@localhost docker]# sudo systemctl restart docker

构建ARM镜像

在QEMU-user-static配置完成后,可以通过Docker构建ARM架构的镜像。以下是一个简单的示例,展示如何构建一个ARM64架构的Ubuntu镜像。

创建Dockerfile

创建一个Dockerfile,指定基础镜像为ARM架构的Ubuntu镜像:

dockerfile复制

FROM arm64v8/ubuntu:latest
RUN apt-get update && apt-get install -y curl
构建镜像

使用以下命令构建镜像,指定目标平台为linux/arm64

bash复制

docker buildx build --platform linux/arm64 -t my-arm-image .

此命令会使用QEMU模拟ARM64环境来构建镜像。

运行ARM镜像

构建完成后,可以运行该ARM镜像来验证是否成功:

bash复制

docker run --rm --platform linux/arm64 my-arm-image uname -m

如果一切正常,输出应为aarch64


http://www.ppmy.cn/server/166031.html

相关文章

远程调用总结

远程调用的作用 在原来的springboot项目中通常是通过调用业务层来实现一个功能。在微服务中由于我们将许多业务进行一个拆开&#xff0c;但是我们需要其他业务层的数据所以就需要通过发送请求的方式来获取数据 实现注册中心nacos(第一步) 我们基于Docker来部署Nacos的注册中心…

工作流项目BPMN.JS_Question梳理

工作流项目 想了解如果候选人熟悉工作流技术、bpmn.js和Flowable工作流引擎&#xff0c;面试官会对哪些信息感兴趣。我需要分析这个问题&#xff0c;并给出一个全面而结构化的回答。 首先&#xff0c;用户可能希望了解作为前端面试官&#xff0c;应该关注候选人哪些方面的知识和…

蓝耘智算平台搭载DeepSeek R1模型:高效环境配置全攻略

声明&#xff1a;非广告&#xff0c;为用户体验文章 目录 引言 一、蓝耘智算平台的核心优势 二、DeepSeek R1模型简介 三、蓝耘平台部署DeepSeek R1的详细步骤 &#x1f343;1&#xff1a;注册与登录蓝耘智算平台 &#x1f343;2&#xff1a;通过应用市场选择模型 &…

Java 集合中的 `removeIf` 和 Stream API 的 `filter`

前言 在Java编程中&#xff0c;处理集合数据是一项常见的任务。为了更高效地过滤集合中的元素&#xff0c;Java 8引入了两种强大的方法&#xff1a;removeIf 和 Stream API 中的 filter 方法。 一、removeIf 方法 1. 工作原理 removeIf 是 Collection 接口中的一个默认方法&…

工厂模式+枚举类的json序列化+redisson的使用

目录 这里分享以下工厂模式反射IoC容器多态的妙用 场景引入 环境准备 代码实现 1.设置枚举类来规定有哪些学习方式 2.设置作业的实体对象 3.获取学习方式的接口 4.进行学习的动作&#xff0c;有出题和搜题 5.使用小猿搜题这种学习方式进行的两种学习动作学习&#xff…

VSCode使用总结

1、VSCode左边资源窗口字体大小设置 方法一&#xff08;使用&#xff0c;已成功&#xff09; 进入安装目录Microsoft VS Code\resources\app\out\vs\workbench(如果是下载的压缩包&#xff0c;解压后resources\app\out\vs\workbench) 打开文件 workbench.desktop.main.css 搜…

Android 系统的启动流程

第一步&#xff0c;当用户按下手机电源键时&#xff0c;首先会从 ROM 中预定义的地方加载引导程序 Boot Loader 到 ARM 中&#xff1b; ROM&#xff08;Ready-Only-Memory&#xff09;&#xff1a;只读存储器&#xff0c;只能读出无法写入&#xff0c;即便是切断电源数据也不会…

JDBC笔记

简介 JDBC简单执行过程&#xff1a; 总结Java提供接口&#xff1b;数据库厂商提供实现&#xff1b;程序员调用接口&#xff1b;接口调用实现类&#xff0c;连接操作数据库 JDBC的概念 JDBC是Java提供的一组独立于任何数据库管理系统的API。 java操作数据库 步骤&#xff1a…