1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
| [root@192 ~]# cat push.sh
#!/bin/bash
# ==========================================
# DockerHub 镜像同步到阿里云私有仓库
# Author : AtticusWilde
# Date : 2026-03-13
# ==========================================
set -e
# 私有仓库
REG="crpi-7jaksta3zhkkymyt.cn-shenzhen.personal.cr.aliyuncs.com/common_imgage"
# 最大重试次数
RETRY=3
# 镜像列表
IMAGES=(
mariadb:10.11
postgres:15-alpine
postgres:16-alpine
php:8.2-fpm
php:8.3-fpm
node:20-alpine
node:18-alpine
python:3.11-alpine
mongo:7
mysql:8.0
memcached:alpine
rabbitmq:3-management
golang:1.22-alpine
openjdk:17-jdk
openjdk:21-jdk
alpine:3.19
portainer/portainer-ce:latest
bitnami/kafka:latest
minio/minio:latest
jenkins/jenkins:lts
gitlab/gitlab-ce:latest
prom/prometheus:latest
grafana/grafana:latest
grafana/loki:latest
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
docker.elastic.co/kibana/kibana:8.12.0
fluent/fluentd:latest
nicolaka/netshoot:latest
joyqi/typecho:latest
ghost:latest
)
echo "======================================"
echo "Docker 镜像同步脚本启动"
echo "目标仓库: $REG"
echo "======================================"
# 登录仓库
docker login --username=AtticusWilde crpi-7jaksta3zhkkymyt.cn-shenzhen.personal.cr.aliyuncs.com
sync_image(){
IMG=$1
echo ""
echo "--------------------------------------"
echo "处理镜像: $IMG"
echo "--------------------------------------"
# 获取tag
TAG=$(echo $IMG | awk -F: '{print $2}')
if [ -z "$TAG" ]; then
TAG="latest"
IMG="$IMG:$TAG"
fi
# 获取镜像名(去掉 registry)
NAME=$(echo $IMG | awk -F/ '{print $NF}' | cut -d':' -f1)
TARGET="$REG/$NAME:$TAG"
echo "目标镜像: $TARGET"
# pull 重试机制
for ((i=1;i<=RETRY;i++))
do
echo "拉取镜像 (尝试 $i/$RETRY)..."
if docker pull $IMG; then
echo "Pull 成功"
break
fi
if [ $i -eq $RETRY ]; then
echo "Pull 失败,跳过 $IMG"
return
fi
sleep 3
done
# 打 tag
docker tag $IMG $TARGET
# push 重试
for ((i=1;i<=RETRY;i++))
do
echo "推送镜像 (尝试 $i/$RETRY)..."
if docker push $TARGET; then
echo "Push 成功"
break
fi
if [ $i -eq $RETRY ]; then
echo "Push 失败: $TARGET"
return
fi
sleep 3
done
echo "镜像同步完成: $TARGET"
}
# 遍历镜像
for img in "${IMAGES[@]}"
do
sync_image $img
done
echo ""
echo "======================================"
echo "所有镜像同步完成"
echo "======================================"
|