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

Docker基础 -- Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南

Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南

作者: (填写作者)  
发布日期: 2025‑05‑26


1 背景与目标

在企业内网(需要代理)环境下,我们需要一套可靠、可复用的 Ubuntu 22.04 交叉编译镜像,用于 ARM64 (AArch64) 固件和内核构建。本文档从零梳理镜像构建全过程,并总结常见坑点与加固方案,便于团队后续快速复制实践。


2 目录结构

.
├── Dockerfile                # 镜像构建文件
└── sources.list.tuna         # 清华 Ubuntu 镜像源(HTTP/HTTPS 可选)

3 TUNA 源文件(sources.list.tuna

版本一定要用 jammy(22.04),勿用 bionic(18.04)!

# 建议使用 HTTP,HTTPS 需先安装 ca-certificates
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

如需源码仓库或 proposed,请自行取消注释并添加 deb-src/-proposed


4 Dockerfile(HTTPS 方案示例)

FROM ubuntu:22.04ENV DEBIAN_FRONTEND=noninteractive \LANG=C.UTF-8# 1️⃣ 先更新官方源,安装 TLS 根证书
RUN apt-get update && \apt-get install -y --no-install-recommends ca-certificates && \rm -rf /var/lib/apt/lists/*# 2️⃣ 覆盖为清华镜像并刷新索引
COPY sources.list.tuna /etc/apt/sources.list
RUN apt-get update# 3️⃣ 安装交叉工具链与常用构建环境(已删 gcc‑multilib / g++‑multilib,gpgv 替代 gpgv2)
RUN apt-get install -y --no-install-recommends \build-essential git openssh-client make \gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \cpp-aarch64-linux-gnu binutils-aarch64-linux-gnu \libssl-dev liblz4-tool libgmp-dev libmpc-dev \libexpat1-dev libgucharmap-2-90-dev ncurses-dev \bison flex fakeroot cmake unzip bc \device-tree-compiler patchelf chrpath gawk texinfo diffstat \qemu-user-static binfmt-support live-build \expect lz4 gpgv python-is-python3 python2 \&& apt-get clean && rm -rf /var/lib/apt/lists/*# 4️⃣ 启用 qemu-aarch64(宿主内核支持时)
RUN update-binfmt --enable qemu-aarch64 || trueCMD ["/bin/bash"]

HTTP 方案:直接把 sources.list.tuna 中的 https:// 改为 http://,并删除第一阶段安装 ca-certificates 的步骤即可。


5 构建与使用

5.1 构建镜像

# 推荐开启 BuildKit 提升速度
export DOCKER_BUILDKIT=1docker build -t cross-aarch64:22.04 .

5.2 本地使用示例

# 映射当前源代码目录进入容器docker run --rm -it -v "$(pwd)":/workspace cross-aarch64:22.04 bash# 容器中编译内核示例
cd /workspace/linux-source
export CROSS_COMPILE=aarch64-linux-gnu-
make ARCH=arm64 defconfig
make -j$(nproc) ARCH=arm64

5.3 多平台构建(可选)

# 推送到私有 Harbor 并同时生成 x86_64/arm64 两架构镜像
docker buildx build --platform linux/amd64,linux/arm64 \-t harbor.example.com/base/cross-aarch64:22.04 --push .

6 常见报错与排查

错误现象根因解决方案
Certificate verification failed镜像源为 HTTPS,但镜像内无 ca-certificates先安装 ca-certificates 或改用 HTTP 源
gcc-multilib conflicts with gcc‑*-aarch64-linux-gnu两者互斥删除 multilib 或使用多阶段 Dockerfile 分离
Package gpgv2 has no installation candidate22.04 已废弃 gpgv2改装 gpgvgnupg
TLS handshake timeout公司代理或网络慢apt 命令加 -o Acquire::Retries=3 -o Acquire::http::Timeout=30

7 最佳实践

  1. BuildKit 缓存:在 CI/CD 中使用 --cache-from 与共享缓存卷,显著减少二次构建耗时。
  2. 镜像瘦身:如果只需运行环境,使用多阶段将产物拷贝到 FROM scratchalpine
  3. 安全:尽量使用非 root 用户运行编译脚本;定期用 trivy 扫描漏洞。
  4. 代理:在公司代理环境,需同时配置 Docker daemon 与容器内部 apt 代理,避免 407 错误。
  5. 版本锁:给 Dockerfile 固定包版本 (e.g. gcc-aarch64-linux-gnu=11.*) 以保证可重现性。

8 引用与参考

  • Tsinghua Tuna 镜像站说明
  • Ubuntu 22.04 Jammy 官方仓库
  • Docker 官方 BuildKit 文档
  • GNU Arm Embedded Toolchain (Ubuntu cross packages)

版权声明:本文档为原创,遵循 CC BY‑SA 4.0 协议;转载请注明出处。

http://www.lryc.cn/news/2392384.html

相关文章:

  • 【Elasticsearch】使用脚本删除索引中的某个字段
  • OpenHarmony平台驱动使用(二),CLOCK
  • 我们是如何为 ES|QL 重建自动补全功能的
  • Keepalived 配置 VIP 的核心步骤
  • 如何使用 Redis 快速实现排行榜?
  • MATLAB在逐渐被Python淘汰吗
  • Git 使用规范
  • 代码随想录第43天:图论4(最小生成树、拓扑排序)
  • AI智能体|扣子(Coze)搭建【自动生成超高质量PPT】工作流
  • list.sort(*, key=None, reverse=False)的两个问题
  • 文档处理的相关工具
  • java基础(面向对象进阶高级)内部类
  • 使用Python,OpenCV,Tesseract-OCR对自己的运动数据图片进行识别及分析,并使用Matplotlib绘制配速图出来
  • 小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型
  • 创建型模式之 Builder (生成器)
  • 智能物资出入库管控系统
  • 鸿蒙OSUniApp 制作倒计时与提醒功能#三方框架 #Uniapp
  • 深入剖析网络协议:七层协议与四层协议详解
  • 机器学习-线性回归基础
  • 自学嵌入式 day 25 - 系统编程 标准io 缓冲区 文件io
  • [Vue组件]半环进度显示器
  • 科技赋能建筑行业,智能楼宇自控系统崭露头角成发展新势力
  • Rust入门之并发编程基础(一)
  • 高级特性实战:死信队列、延迟队列与优先级队列(二)
  • VR 电缆故障测试系统:技术革新​
  • Rocky Linux上安装Go
  • 深度学习论文: FastVLM: Efficient Vision Encoding for Vision Language Models
  • 白杨SEO:做AI搜索优化的DeepSeek、豆包、Kimi、百度文心一言、腾讯元宝、通义、智谱、天工等AI生成内容信息采集主要来自哪?占比是多少?
  • 显示docker桌面,vnc远程连接docker
  • Web 端顶级视效实现:山海鲸端渲染底层原理与发布模式详解