Dockerfile中FROM指令指定不同架构镜像的技巧

阿辰吖_2334

阿辰吖_2334

2026-04-08

413人浏览

原创

构建多架构 docker 镜像需用 --platform 指定目标架构(如 linux/arm64),依赖基础镜像的多架构 manifest list;from --platform=linux/arm64 可强制单阶段架构,需 docker 20.10+;跨架构构建须启用 qemu-user-static。

dockerfile中from指令指定不同架构镜像的技巧

在 Dockerfile 中使用 FROM 指令时,若需构建多架构镜像(如 arm64、amd64),不能仅靠写死镜像名,而要结合构建上下文和平台声明来动态拉取对应架构的基础镜像。

用 --platform 显式声明目标架构

Docker 构建时可通过 --platform 参数指定目标 CPU 架构,Docker 会自动匹配该架构的镜像层。即使基础镜像(如 alpine:latest)是多架构 manifest 列表,Docker 也会根据该参数选择对应变体。

  • 构建 arm64 镜像:docker build --platform linux/arm64 -t myapp-arm64 .
  • 构建 amd64 镜像:docker build --platform linux/amd64 -t myapp-amd64 .
  • 确保基础镜像支持目标平台(如官方 debian、ubuntu、alpine 都已提供多架构支持)

在 FROM 中使用带平台前缀的镜像名(可选但明确)

对于某些非官方或自建镜像,若未发布标准 manifest list,可直接在 FROM 中写明平台限定的镜像地址,格式为:docker.io/namespace/image:tag@sha256:... 或使用平台别名(需镜像仓库支持)。

  • 例如:FROM --platform=linux/arm64 python:3.11-slim —— 这种写法会强制此 stage 使用 arm64 架构的 python 镜像
  • 注意:该语法要求 Docker 20.10+,且只影响当前 FROM 行,不影响后续指令执行环境
  • 适合混合构建场景(如在 amd64 主机上交叉编译 arm64 二进制)

避免硬编码架构相关的标签(如 -arm64 后缀)

手动维护 python:3.11-slim-arm64 这类标签容易出错,也不符合 OCI 标准。官方镜像一般不提供这种后缀变体,而是通过 manifest list + --platform 自动分发。

  • 错误示例:FROM python:3.11-slim-arm64(该镜像通常不存在)
  • 正确做法:依赖镜像仓库的多架构 manifest,配合构建参数驱动
  • 可用 docker manifest inspect python:3.11-slim 查看支持的架构列表

本地构建时确认 QEMU 和 binfmt 支持(尤其跨架构)

在 x86_64 机器上构建 arm64 镜像,需要 Docker 能运行 arm64 二进制(如 RUN 指令中的命令)。这依赖 qemu-user-static 和内核 binfmt_misc 注册。

  • 一键启用:docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  • 验证是否生效:cat /proc/sys/fs/binfmt_misc/qemu-aarch64 应存在且 enabled
  • 若跳过此步,构建可能在 RUN 阶段失败(“exec format error”)
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1689

3

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.06.27

1211

7

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

949

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

2700

5

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

705

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

5119

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

6077

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2313

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

239

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习