buildx build 是什么
buildx build 是功能更完整的构建命令,产物去向由导出选项决定:--load 载入本地镜像库、--push 推到镜像仓库,两个都不写时结果只留在构建缓存里,docker images 看不到。多平台构建必须用 --push,本地镜像库承载不了多平台清单。
基本信息
| 用途 | 支持多平台、缓存导出、自定义输出的构建命令 |
|---|---|
| 导出选项 | --load 导入本地、--push 推送仓库、--output 自定义(local、tar、oci) |
| 多平台限制 | 多平台产物不能 --load,只能推送 |
| 前提 | 需要 buildx 构建器,多平台要求 docker-container 驱动 |
| 查看构建器 | docker buildx ls 查看实例与驱动 |
典型使用场景
- 一次构建多平台镜像:amd64 与 arm64 同时产出并推送
- 替代 docker build 使用缓存导出,让 CI 复用构建缓存
- 把产物导出成 tar 交给下游流程或做离线分发
- 在本地验证构建结果,用 --load 之后才能被 docker images 看到
- 统一本地与 CI 的构建工具,减少结果差异带来的排查成本
- 为只关心文件产物(不要镜像)的场景导出到本地目录
示例
示例
docker buildx ls # 查看构建器与驱动
docker buildx build --load -t app/web:dev . # 载入本地镜像库
docker buildx build --platform linux/amd64,linux/arm64 \
--tag registry.example.com/app/web:1.0 --push . # 多平台必须推送
docker buildx build --output type=docker,dest=image.tar -t app/web:1.0 . # 导出 tar产物去向怎么选
| 选项 | 结果 | 适用情况 |
|---|---|---|
| 不写导出选项 | 只留在构建缓存里 | 仅验证能否构建成功 |
| --load | 载入本地镜像库 | 本地运行与调试 |
| --push | 推送到镜像仓库 | CI 发布,多平台唯一可行 |
| --output type=docker,dest | 导出为 tar 文件 | 离线分发、审计留档 |
| --output type=local | 导出到本地目录 | 只需要文件产物,不需要镜像 |
docker-container 驱动下漏加 --load 或 --push,是“构建成功却找不到镜像”的第一原因,先确认导出选项再怀疑构建本身。
多平台构建会并行执行各平台的阶段,构建器要先具备对应平台的能力(原生节点或 binfmt 注册),否则报 exec format error 之类的错误。
新装的 buildx 默认构建器可能不支持多平台,先用 docker buildx create 建实例并 --use 切换,再执行多平台构建。