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

如何将容器镜像的所有标签镜像同步到另一registry或命名空间

容器镜像全标签同步/迁移实现方案

核心逻辑统一为「拉取源镜像全标签→批量重打目标标签→循环推送所有标签」,Podman和Docker原生均没有直接的全标签推送命令,通过脚本循环即可实现需求。

操作步骤

1. 拉取源镜像全部标签

  • Podman环境直接使用内置参数:
    podman pull --all-tags <源registry地址>/<源镜像名称>
    如果源是Docker Hub可以省略registry地址
  • Docker环境没有内置--all-tags参数,先拉取标签列表再循环拉取:
# 获取源镜像所有标签
tags=$(docker search --list-tags <源registry地址>/<源镜像名称> --format "{{.Name}}" | cut -d ":" -f 2)
# 循环拉取所有标签
for tag in $tags; do docker pull <源registry地址>/<源镜像名称>:$tag; done

2. 批量重打目标镜像标签

以Podman为例,Docker替换命令前缀即可:

# 获取源镜像所有本地标签
tags=$(podman images <源registry地址>/<源镜像名称> --format "{{.Tag}}")
# 循环打新标签
for tag in $tags; do podman tag <源registry地址>/<源镜像名称>:$tag <目标registry地址>/<目标镜像名称>:$tag; done

如果是推送到同registry下的不同镜像名称,只需要替换镜像名称部分即可

3. 批量推送全部标签

同样循环处理即可,Podman示例:

tags=$(podman images <目标registry地址>/<目标镜像名称> --format "{{.Tag}}")
for tag in $tags; do podman push <目标registry地址>/<目标镜像名称>:$tag; done

操作前需要先通过podman login/docker login分别登录源和目标镜像仓库,完成权限认证

通用一键脚本

适配Podman和Docker双环境,修改头部配置即可直接使用:

#!/bin/bash
# 自定义配置项
SOURCE_REGISTRY=""  # 源registry地址,Docker Hub留空即可
SOURCE_IMAGE="nginx" # 源镜像名
TARGET_REGISTRY="registry.example.com" # 目标registry地址,同registry留空
TARGET_IMAGE="my-nginx" # 目标镜像名
RUNTIME="podman" # 可选值 podman / docker

# 1. 拉取源镜像全标签
if [ "$RUNTIME" = "podman" ]; then
    $RUNTIME pull --all-tags ${SOURCE_REGISTRY:+${SOURCE_REGISTRY}/}${SOURCE_IMAGE}
else
    tags=$($RUNTIME search --list-tags ${SOURCE_REGISTRY:+${SOURCE_REGISTRY}/}${SOURCE_IMAGE} --format "{{.Name}}" | cut -d ":" -f 2)
    for tag in $tags; do $RUNTIME pull ${SOURCE_REGISTRY:+${SOURCE_REGISTRY}/}${SOURCE_IMAGE}:$tag; done
fi

# 2. 批量重打标签
tags=$($RUNTIME images ${SOURCE_REGISTRY:+${SOURCE_REGISTRY}/}${SOURCE_IMAGE} --format "{{.Tag}}")
for tag in $tags; do
    $RUNTIME tag ${SOURCE_REGISTRY:+${SOURCE_REGISTRY}/}${SOURCE_IMAGE}:$tag ${TARGET_REGISTRY:+${TARGET_REGISTRY}/}${TARGET_IMAGE}:$tag
done

# 3. 批量推送目标标签
for tag in $tags; do
    $RUNTIME push ${TARGET_REGISTRY:+${TARGET_REGISTRY}/}${TARGET_IMAGE}:$tag
done

优化建议

  • 不需要保留本地镜像的场景,可以在推送完成后加一步批量删除本地镜像的命令,节省存储空间
  • 大镜像/大批量镜像同步场景,可以使用skopeo工具实现免本地落地的直接跨仓库同步,传输效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:21:01