#!/bin/bash # ============================================================ # 一键推送基础镜像到内网 Harbor # 在能访问外网的机器上执行 # 用法: bash scripts/push-base-images.sh # ============================================================ set -e HARBOR_HOST="192.168.195.25:19900" HARBOR_PROJECT="library" # 需要推送的基础镜像映射: "外网镜像|内网路径" IMAGES=( "mcr.microsoft.com/dotnet/aspnet:10.0-preview|dotnet/aspnet:10.0-preview" "mcr.microsoft.com/dotnet/sdk:10.0-preview|dotnet/sdk:10.0-preview" "node:20-alpine|node:20-alpine" ) echo "==========================================" echo " 推送基础镜像到内网 Harbor" echo " Harbor: ${HARBOR_HOST}" echo "==========================================" # 登录 Harbor echo "" echo "[登录] Harbor ${HARBOR_HOST}" docker login "${HARBOR_HOST}" SUCCESS=0 FAIL=0 for item in "${IMAGES[@]}"; do SRC="${item%%|*}" DST="${item##*|}" TARGET="${HARBOR_HOST}/${HARBOR_PROJECT}/${DST}" echo "" echo "------------------------------------------" echo "[拉取] ${SRC}" if docker pull "${SRC}"; then echo "[标签] ${TARGET}" docker tag "${SRC}" "${TARGET}" echo "[推送] ${TARGET}" if docker push "${TARGET}"; then echo "[完成] ✓ ${DST}" ((SUCCESS++)) else echo "[失败] ✗ 推送失败: ${DST}" ((FAIL++)) fi else echo "[失败] ✗ 拉取失败: ${SRC}" ((FAIL++)) fi done echo "" echo "==========================================" echo " 完成: 成功 ${SUCCESS}, 失败 ${FAIL}" echo "=========================================="