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

如何在Linux机器上跨镜像仓库复制多操作系统多架构镜像及关联资源?

解决方案:无需Windows机器,直接跨仓库复制多架构镜像

你完全不需要使用Windows机器来完成这个迁移操作,问题出在你之前的方法需要在Linux机器上拉取并解压Windows镜像层,而Linux和Windows的文件系统处理逻辑(比如符号链接)不兼容导致报错。下面是两种更简便、高效的直接复制方案,无需本地拉取镜像:

方法1:使用skopeo直接跨仓库同步(推荐)

Skopeo是专门为镜像仓库间复制、检查镜像设计的工具,它可以直接在仓库之间传输镜像的manifest和所有关联blobs,不需要将镜像拉取到本地主机,完美避免了跨系统镜像的本地处理问题。

操作步骤:

  1. 先登录私有仓库和公共docker.io仓库:
skopeo login myreg  # 输入私有仓库的用户名密码
skopeo login docker.io  # 输入docker.io的用户名密码
  1. 复制整个多架构镜像manifest及所有关联资源到目标仓库:
skopeo copy --all docker://myreg/img/name:latest docker://docker.io/img/name:latest
  • --all 参数会确保同步manifest列表中的所有架构/系统变体(包括Windows和Linux镜像)
  • 这个命令会直接在两个仓库之间传输所有必要的数据,不会在本地解压任何镜像层,完全避开了之前的报错问题

方法2:使用Buildah直接推送Manifest列表

如果你更倾向于用Buildah完成操作,也可以直接推送私有仓库的Manifest列表到公共仓库,无需单独处理每个架构镜像:

操作步骤:

  1. 先登录两个仓库(Buildah会使用本地的容器认证配置,你可以用buildah login或者复用Docker/skopeo的登录配置):
buildah login myreg
buildah login docker.io
  1. 直接推送整个Manifest列表到目标仓库:
buildah manifest push --all docker://myreg/img/name:latest docker://docker.io/img/name:latest
  • 同样,--all 参数会同步所有架构的镜像资源,Buildah会直接从私有仓库拉取manifest和blobs并推送到公共仓库,不会在本地处理Windows镜像层,因此不会出现解压错误

为什么之前的方法会报错?

你之前的流程需要在Linux机器上拉取Windows镜像,Buildah/Docker在拉取时会尝试解压镜像的tar层来存储到本地,但Windows镜像中的文件结构(比如跨路径的符号链接)在Linux系统下无法正确处理,导致了链接创建失败的错误。而上面的两种方法都是直接在仓库间做数据传输,跳过了本地解压的步骤,自然就解决了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:34:09