Docker Buildx是官方推荐的多平台构建工具,支持在单一命令中为AMD64、ARM64、ARMv7等架构并行构建并推送镜像,底层基于BuildKit,依赖QEMU模拟实现跨架构编译。
直接用
只能构建当前宿主机架构的镜像,比如在 x86_64 机器上跑,生成的就是
镜像。要真正支持多架构(如同时兼容 AMD64、ARM64、ARMv7),必须用
Docker Buildx
—— 它是 Docker 官方推荐的多平台构建工具,底层基于 BuildKit,能交叉编译、并行构建、统一推送。
确认 Buildx 环境已就绪
运行以下命令检查是否启用 Buildx 并有可用 builder 实例:
—— 应输出类似
—— 查看当前 builder 列表,若无活跃实例,需创建:
该命令会启动一个支持三架构的 builder,并设为默认。Windows/macOS 用户使用 Docker Desktop 时通常已预装;Linux 用户可能需要手动安装 QEMU 模拟器:
编写生产级 Dockerfile(含多阶段+安全规范)
以 Go 应用为例,关键点包括:基础镜像选
(小体积)、非 root 用户、显式指定 GOOS/GOARCH、清理构建缓存:
注意:
在构建阶段不硬编码,而是由 Buildx 在不同平台自动注入;
文件也必须存在,排除
、
、
等无关内容。
Docker Sandbox
创建并管理 Docker 沙箱虚拟机环境以安全执行代理。适用于运行不受信任代码、探索包或隔离代理工作负载。支持 Claude、Codex、Copilot、Gemini 和 Kiro 代理,并提供网络代理控制。
下载
执行多架构构建与推送
构建命令需明确指定目标平台,并推送到带命名空间的仓库(如 Docker Hub 或私有 Registry):
本地构建并加载到 Docker 引擎(仅用于测试):
构建并直接推送到远程仓库(生产推荐):
推送成功后,Docker Hub 页面会显示镜像支持的架构标签(如
、
)。任意架构的机器拉取
时,Docker 会自动匹配本地平台拉取对应镜像层。
验证多架构镜像是否生效
无需在每种硬件上实测,可用以下方式快速验证:
查看镜像 manifest:
输出中应包含
数组,列出各平台 digest 和 size
在 ARM64 机器(如树莓派或 AWS Graviton 实例)上运行:
观察日志是否输出
,而非报错“exec format error”
若使用私有 Registry,确保其支持 OCI v1.0+,且推送前已执行
认证。
docker buildlinux/amd64docker buildx versiongithub.com/docker/buildx v0.10.4docker buildx lsdocker buildx create --use --name mybuilder --platform linux/amd64,linux/arm64,linux/arm/v7docker run --privileged --rm tonistiigi/binfmt --install allgolang:1.20-alpineFROM golang:1.20-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o /usr/local/bin/app .
FROM alpine:3.19
RUN addgroup -g 1001 -f appgroup && adduser -S appuser -u 1001
USER appuser
COPY --from=builder /usr/local/bin/app /usr/local/bin/app
EXPOSE 8000
CMD ["app"]GOARCH.dockerignorenode_modules.git*.logdocker buildx build --platform linux/amd64,linux/arm64 -t yourname/hello:1.0 . --loaddocker buildx build --platform linux/amd64,linux/arm64 -t yourname/hello:1.0 --push .linux/amd64linux/arm64yourname/hello:1.0docker buildx imagetools inspect yourname/hello:1.0manifestsdocker run --rm yourname/hello:1.0GOARCH: arm64docker login