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

如何使用Shell脚本拉取和推送多个Docker镜像?

批量处理Docker镜像的Shell脚本扩展方案

核心思路

把单镜像的处理逻辑封装成函数,通过遍历指定的镜像列表实现批量处理,既保留原有逻辑(拉取、判断存在性、备份+推送/直接推送),又能灵活扩展到多个镜像。

完整示例脚本

#!/bin/bash

# 目标仓库路径,根据实际情况修改
D_PATH="your-target-repo.example.com"

# 定义单镜像处理函数
process_image() {
    local docker_image="$1"
    # 拉取源镜像,拉取失败则跳过
    if ! docker pull "$docker_image"; then
        echo "❌ 拉取镜像 $docker_image 失败,跳过处理"
        return 1
    fi

    # 提取镜像名称(去掉源仓库前缀)
    local image_name=$(echo "$docker_image" | cut -d / -f 2-)
    echo "🔍 处理镜像:$image_name"

    # 检查目标仓库是否已有该镜像
    if docker pull "${D_PATH}/${image_name}" 2>&1 | grep -E '(not found|no such|unable to|ERROR)' >/dev/null; then
        echo "✅ 目标仓库无该镜像,直接打标签并推送"
        docker tag "$docker_image" "${D_PATH}/${image_name}"
        docker push "${D_PATH}/${image_name}"
    else
        echo "⚠️ 目标仓库已存在该镜像,先备份再推送"
        # 生成带时间戳的备份标签,避免覆盖
        local backup_tag="backup_$(date +%Y%m%d_%H%M%S)"
        # 备份现有镜像
        docker tag "${D_PATH}/${image_name}" "${D_PATH}/${image_name}:${backup_tag}"
        docker push "${D_PATH}/${image_name}:${backup_tag}"
        # 推送新镜像覆盖原标签
        docker tag "$docker_image" "${D_PATH}/${image_name}"
        docker push "${D_PATH}/${image_name}"
    fi
}

# 要批量处理的镜像列表,可按需添加/修改
TARGET_IMAGES=(
    "nginx:latest"
    "redis:6.2"
    "mysql:8.0"
    "your-custom-image:v1.0"
)

# 遍历镜像列表,逐个处理
for img in "${TARGET_IMAGES[@]}"; do
    echo "====================================="
    process_image "$img"
done

关键说明

  1. 函数封装:把单镜像的处理逻辑放到process_image函数中,代码更易维护,遍历调用更简洁。
  2. 镜像列表管理:用数组TARGET_IMAGES存储要处理的镜像,支持任意数量的镜像,修改起来更直观。
  3. 备份逻辑优化:用时间戳作为备份标签,确保每个备份唯一,避免备份被覆盖。
  4. 错误处理:拉取源镜像失败时直接跳过该镜像,避免影响后续镜像的处理。

关于你提到的遍历命令

你看到的for image in $(docker images --format "{{.Repository}}"); do docker pull $image; done确实可以遍历本地已有的镜像仓库名并拉取,但它存在两个局限:

  • 会处理本地所有镜像,包括你不需要批量推送的无关镜像;
  • 无法区分源镜像和目标仓库的镜像逻辑,不贴合你的备份+推送需求。
    因此更推荐用上述指定镜像列表+函数封装的方案,精准控制要处理的镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:28:12