当前位置: 首页 > news >正文

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

在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.lryc.cn/news/533084.html

相关文章:

  • Vue3+codemirror6实现公式(规则)编辑器
  • Lua中文语言编程源码-第十一节,其它小改动汉化过程
  • Safari常用快捷键
  • Git登录并解决 CAPTCHA
  • Websocket从原理到实战
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_get_options函数
  • 判断您的Mac当前使用的是Zsh还是Bash:echo $SHELL、echo $0
  • Centos执行yum命令报错
  • 订单超时设计(1)--- 如何使用redis实现订单超时实时关闭功能
  • 485网关数据收发测试
  • RabbitMQ快速上手及入门
  • 4种架构的定义和关联
  • 109,【1】攻防世界 web 题目名称-文件包含
  • leetcode90 子集II
  • DeepSeek模型构建与训练
  • PyTorch torch.unbind、torch.split 和 torch.chunk函数介绍
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》061-Vue Router的动态路由
  • 杭州某小厂面试
  • C基础寒假练习(8)
  • 设计模式 ->模板方法模式(Template Method Pattern)
  • Redis存储⑤Redis五大数据类型之 List 和 Set。
  • MySQL开窗函数种类和使用总结
  • DeepSeek——DeepSeek模型部署实战
  • zsh: command not found: pip
  • 机器学习数学基础:16.方程组
  • 即梦(Dreamina)技术浅析(四):生成对抗网络
  • 2025年软件测试五大趋势:AI、API安全、云测试等前沿实践
  • Vue混入(Mixins)与插件开发深度解析
  • 【C++】C++11
  • k8sollama部署deepseek-R1模型,内网无坑