You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建推送多平台Docker镜像?已构建arm64镜像处理疑问

问题描述

在x86 Intel笔记本上执行以下命令构建适用于arm64平台的Docker镜像:

docker buildx build . --progress plain --platform linux/arm64/v8 -t myimage:0.4 &> docker-build.log

日志无报错,构建看似成功,但执行docker images或docker image ls都找不到myimage:0.4镜像。

根据Docker文档说明:

在docker build中,所有构建完成后都会创建容器镜像并导出至docker images。buildx使此步骤可配置,允许将构建结果直接导出至客户端、OCI镜像tar包、镜像仓库等。

其中提到docker导出类型会将单平台结果镜像以Docker镜像规范tar包的形式写入客户端。

我有以下两个问题:

  1. 如何构建同时支持amd64和arm64的多平台镜像并推送到Docker Hub?是否只能添加--push参数?或者能否先通过--output tar导出到本地文件,再推送到Docker Hub?(我尝试过--output tar --push,但报错提示不能同时使用local和push!)
  2. 我刚刚构建的arm64镜像是否丢失了?能否现在将其导出为tar包并推送到Docker Hub?

解决方案

问题1:构建多平台镜像并推送到Docker Hub

  • 最直接高效的方式是使用--push参数,同时指定多个目标平台,命令示例:
    docker buildx build . --platform linux/amd64,linux/arm64/v8 -t [你的Docker Hub用户名]/myimage:0.4 --push
    
    该命令会在buildx完成多平台构建后,直接将镜像推送到Docker Hub,无需在本地保存镜像。
  • 不能同时使用--output tar和--push,因为二者属于互斥的输出方式:--output tar是将镜像导出到本地文件(属于local输出类型),而--push是直接推送至远程仓库。若想先本地导出再推送,仅适用于单平台场景——多平台镜像无法导出为单个tar包,若强行拆分操作,需要分别构建单平台镜像、导出tar、加载后推送,再手动创建manifest列表,步骤繁琐且效率低下,远不如直接用--push一步到位。

问题2:找回并处理之前构建的arm64镜像

  • 镜像并未丢失,只是buildx默认不会将跨平台构建的结果导入本地Docker镜像列表(这就是docker images看不到的原因)。你可以重新执行构建命令,添加--output type=docker参数将镜像导出到本地:
    docker buildx build . --progress plain --platform linux/arm64/v8 -t myimage:0.4 --output type=docker
    
    执行完成后,再用docker images即可看到该镜像。
  • 若要导出为tar包,使用--output type=tar,dest=myimage-arm64.tar参数:
    docker buildx build . --platform linux/arm64/v8 -t myimage:0.4 --output type=tar,dest=myimage-arm64.tar
    
    得到tar包后,先加载到本地Docker:
    docker load -i myimage-arm64.tar
    
    再推送到Docker Hub:
    docker tag myimage:0.4 [你的Docker Hub用户名]/myimage:0.4-arm64
    docker push [你的Docker Hub用户名]/myimage:0.4-arm64
    

内容的提问来源于stack exchange,提问作者MsA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:06:25