--platform 是什么
docker run --platform 在多架构镜像里挑选要拉取并运行的那个平台变体,常见于 Apple Silicon 机器上跑只有 amd64 变体的镜像,或核对跨平台产物。镜像本身是单架构时指定其他平台会直接报 no matching manifest。
基本信息
| 用途 | 选择镜像的 OS 与架构变体 |
|---|---|
| 语法 | --platform linux/amd64、linux/arm64,可带变体如 linux/arm/v7 |
| 前提 | 仓库里的 tag 指向多架构清单(manifest list) |
| 模拟运行 | 宿主不原生支持时走 QEMU 模拟,需要 binfmt 支持 |
| 查看清单 | docker buildx imagetools inspect 镜像:标签 |
典型使用场景
- Apple Silicon 机器上跑只有 amd64 变体的镜像,用模拟顶上继续开发
- 在 amd64 宿主机上验证 arm64 产物能否正常启动
- 排查 exec format error:确认容器里跑的架构与宿主是否一致
- 多平台构建之后核对某个 tag 究竟包含哪些平台
- 固定平台保证依赖特定架构二进制(如硬件加速库)的服务行为一致
- 把平台写进 CI 的构建矩阵,让每个发布产物都有对应的验证记录
示例
示例
docker run --rm --platform linux/amd64 alpine:3.20 uname -m # 输出 x86_64
docker run --rm --platform linux/arm64 alpine:3.20 uname -m # 输出 aarch64
docker buildx imagetools inspect nginx:1.27-alpine # 看该镜像有哪些平台
docker inspect -f '{{.Architecture}}/{{.Os}}' <容器> # 确认实际运行架构常见现象与处置
| 现象 | 原因 | 处置 |
|---|---|---|
| exec format error | 拉到的镜像架构与宿主不符 | 显式指定 --platform,或换成原生架构镜像 |
| no matching manifest | 该 tag 没有对应平台,或镜像是单架构 | 用 imagetools inspect 查看平台列表 |
| 性能明显下降 | QEMU 模拟运行,指令需要翻译 | 仅用于验证,生产改原生架构 |
| 个别调用报错 | 模拟层未覆盖的系统调用 | 换原生架构运行或改依赖实现 |
只有多架构镜像才谈得上选择平台;单架构镜像指定其他平台不会自动转换,容器启动阶段就会失败。
模拟运行下 CPU 密集任务的耗时可能成倍增加,压测与性能结论在模拟环境里不可信,只用于验证功能能否跑通。
在目标平台上跑 uname -m 是最快的确认方式:输出与预期不符说明拉到的不是期望的变体,再回去核对清单与构建参数。