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

docekr在 x86d的 环境下打包arm64架构的docker包

buildx简介
buildx 可用于在单个平台上实现跨 CPU 架构编译。

buildx 的实现依赖 QEMU (某开源模拟器),支持多种 CPU 架构,如 ARM、Power-PC 和 RISC-V。

需要注意:buildx推送镜像时,不会走主机的hosts文件,默认使用https协议

关于QEMU
QEMU 可以模拟一个完整的操作系统(开销较大)。QEMU还有一种用户态模式,基于 binfmt_misc 模拟目标硬件的用户空间,该模式可以创建轻量级的虚拟机(chroot 或者 容器),通过该方式提供多种平台的虚拟机,然后基于Dockerfile进行编译,平台不通,但Dockerfile是同一份。

系统限制
Linux 内核v4.8及更高
Docker v19.03及更高

打包命令 

# 1. 创建并使用新的构建器(如果还没有创建)
docker buildx create --name mybuilder --use

# 2. 启动构建器
docker buildx inspect --bootstrap

# 3. 构建 ARM64 架构的镜像
docker buildx build \
  --platform linux/arm64 \
  --load \
  -t your-image-name:1.0.0 .

但是老是会出现连接问题,没有办法拉取镜像,及时通过魔法下载到了本地但是 后来才了解到buildx每次构建的时候是内部去拉取镜像 还是不行一直出现以下问题:

[+] Building 31.7s (3/3) FINISHED                                                           docker-container:mybuilder3
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 3.01kB                                                                             0.0s
 => ERROR [internal] load metadata for docker.io/library/python:3.8.12                                            31.7s
 => [auth] library/python:pull token for registry-1.docker.io                                                      0.0s
------
 > [internal] load metadata for docker.io/library/python:3.8.12:
------
Dockerfile:2
--------------------
   1 |     # base image
   2 | >>> FROM python:3.8.12
   3 |     LABEL org.opencontainers.image.source https://github.com/serengil/deepface
   4 |
--------------------
ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: python:3.8.12: failed to resolve source metadata for docker.io/library/python:3.8.12: failed to authorize: DeadlineExceeded: failed to fetch oauth token: Post "https://auth.docker.io/token": dial tcp 185.45.7.189:443: i/o timeout

一直报错连不上https://auth.docker.io/token

在网上找了各自解决方式,试了换镜像源、配置DNS、切换代理等等方式都是不行,但是我用docker build就没问题,想着这两之间构建的环境是一样的吗?问了下chatgpt给出的答案也很模糊,但是明确问题应该就是docker buildx 和docker build环境是不一样的,所以使用的docker login应该也不一样,
在使用 docker buildx之前我们都需要
 

docker buildx create --name mybuilder
docker buildx use mybuilder

这里使用了mybuilder环境,构建了新的 Buildx builder 实例后好像和默认的就不一致了,所以我切换到默认的环境

--看下有哪些
docker buildx ls
--切换到默认
docker context use default
docker buildx use default


然后在执行docker buildx就可以访问到认证信息,开始构建了。

当然在构建的时候会出现许多版本问题 原因是我是在x86的环境下去打包适配arm64架构的镜像包 再打包配置dockerfile文件的时候要去官网查找一下适配的镜像版本,或者一些相关的依赖包是不是两者都通用


http://www.kler.cn/a/507441.html

相关文章:

  • Kafka权威指南(第2版)读书笔记
  • eBay账号安全攻略:巧妙应对风险
  • FLASK创建下载
  • YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
  • 遗传算法 (Genetic Algorithm) 算法详解及案例分析
  • Flink链接Kafka
  • RK3568平台(音频篇)lineout无声调试
  • 游程编码RLE的简单解释
  • opencv基础学习
  • 画流程图 代码生成流程图 流程图自动运行
  • JavaScript系列(31)--装饰器详解
  • uc/os-II 原理及应用(八) 系统裁减以及移植到51单片机-下
  • Redis登录优化
  • YUV转RGB
  • Python编程与机器学习:解锁气象、海洋、水文领域的新实践
  • 从 0 开始实现一个 SpringBoot + Vue 项目
  • windows远程桌面连接限定ip
  • HTTP 性能优化策略
  • 【设计模式】 单例模式(单例模式哪几种实现,如何保证线程安全,反射破坏单例模式)
  • 关于ubuntu命令行连接github失败解决办法
  • 小哆啦的跳跃挑战:能否突破迷宫的极限?
  • 【北京迅为】iTOP-4412全能版使用手册-第七部分 Android入门教程
  • 【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
  • el-dialog弹窗的@open方法中,第一次引用ref发现undefined问题,第二次后面又正常了
  • 微服务容器化部署好处多吗?
  • 记录一个v-if与自定义指令的BUG