diff --git a/README.en.md b/README.en.md
index c90202c..3b07c75 100644
--- a/README.en.md
+++ b/README.en.md
@@ -6,7 +6,7 @@
- Self-built Docker image acceleration service, based on the official registry, one-click deployment of Docker, K8s, Quay, Ghcr, Mcr, elastic, and other image acceleration management services.
+ Self-built Docker image acceleration service, based on the official registry, one-click deployment of Docker, K8s, Quay, Ghcr, Mcr, elastic, nvcr and other image acceleration management services.
@@ -183,6 +183,7 @@ docker pull gcr.your_domain_name/google-containers/pause:3.1
| quay.io | quay.your_domain_name | Quay Container Registry
| mcr.microsoft.com | mcr.your_domain_name | Microsoft Container Registry
| docker.elastic.co | elastic.your_domain_name | Elastic Stack
+| nvcr.io | nvcr.your_domain_name | NVIDIA Container Registry
---
diff --git a/README.md b/README.md
index d65cd6f..837a05a 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
- 自建Docker镜像加速服务,基于官方 registry 一键部署Docker、K8s、Quay、Ghcr、Mcr、elastic等镜像加速\管理服务.
+ 自建Docker镜像加速服务,基于官方 registry 一键部署Docker、K8s、Quay、Ghcr、Mcr、elastic、nvcr等镜像加速\管理服务.
@@ -194,6 +194,7 @@ docker pull gcr.your_domain_name/google-containers/pause:3.1
| quay.io | quay.your_domain_name | Quay Container Registry
| mcr.microsoft.com | mcr.your_domain_name | Microsoft Container Registry
| docker.elastic.co | elastic.your_domain_name | Elastic Stack
+| nvcr.io | nvcr.your_domain_name | NVIDIA Container Registry
---
diff --git a/config/registry-nvcr.yml b/config/registry-nvcr.yml
new file mode 100644
index 0000000..b903063
--- /dev/null
+++ b/config/registry-nvcr.yml
@@ -0,0 +1,42 @@
+version: 0.1
+log:
+ fields:
+ service: registry
+storage:
+ filesystem:
+ rootdirectory: /var/lib/registry
+ delete:
+ enabled: true
+ cache:
+ blobdescriptor: inmemory
+ blobdescriptorsize: 10000
+ maintenance:
+ uploadpurging:
+ enabled: true
+ age: 168h
+ interval: 24h
+ dryrun: false
+ readonly:
+ enabled: false
+http:
+ addr: :5000
+ headers:
+ X-Content-Type-Options: [nosniff]
+ Access-Control-Allow-Origin: ['*']
+ Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
+ Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
+ Access-Control-Max-Age: [1728000]
+ Access-Control-Allow-Credentials: [true]
+ Access-Control-Expose-Headers: ['Docker-Content-Digest']
+
+health:
+ storagedriver:
+ enabled: true
+ interval: 10s
+ threshold: 3
+
+proxy:
+ remoteurl: https://nvcr.io
+ username:
+ password:
+ ttl: 168h
\ No newline at end of file
diff --git a/docker-compose.yaml b/docker-compose.yaml
index c58f08c..5b45916 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -143,6 +143,24 @@ services:
networks:
- registry-net
+ ## nvcr.io
+ nvcr:
+ container_name: reg-nvcr
+ image: dqzboy/registry:latest
+ restart: always
+ environment:
+ - OTEL_TRACES_EXPORTER=none
+ #- http=http://host:port
+ #- https=http://host:port
+ volumes:
+ - ./registry/data:/var/lib/registry
+ - ./registry-elastic.yml:/etc/distribution/config.yml
+ #- ./htpasswd:/auth/htpasswd
+ ports:
+ - 59000:5000
+ networks:
+ - registry-net
+
## UI
registry-ui:
container_name: registry-ui
diff --git a/install/DockerProxy_Install.sh b/install/DockerProxy_Install.sh
index 67b361d..b9346fd 100644
--- a/install/DockerProxy_Install.sh
+++ b/install/DockerProxy_Install.sh
@@ -100,9 +100,72 @@ DOCKER_COMPOSE_FILE="docker-compose.yaml"
CMDUI_IMAGE_NAME="dqzboy/hubcmd-ui"
CMDUI_COMPOSE_FILE="${GITRAW}/hubcmdui/${DOCKER_COMPOSE_FILE}"
+# Registry Domain prefix
+REGISTRY_SLD="ui、hub、gcr、ghcr、k8sgcr、k8s、quay、mcr、elastic、nvcr"
+RECORDS=("ui" "hub" "gcr" "ghcr" "k8sgcr" "k8s" "quay" "mcr" "elastic" "nvcr")
+
attempts=0
maxAttempts=3
+# registry services
+function REGISTRY_MENU() {
+ echo -e "${YELLOW}-------------------------------------------------${RESET}"
+ echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
+ echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
+ echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
+ echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
+ echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
+ echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
+ echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
+ echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
+ echo -e "${GREEN}9)${RESET} ${BOLD}nvcr${RESET}"
+ echo -e "${GREEN}10)${RESET} ${BOLD}all${RESET}"
+ echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
+ echo -e "${YELLOW}-------------------------------------------------${RESET}"
+}
+function REGISTRY_SER_MENU() {
+ echo -e "${YELLOW}-------------------------------------------------${RESET}"
+ echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
+ echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
+ echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
+ echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
+ echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
+ echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
+ echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
+ echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
+ echo -e "${GREEN}9)${RESET} ${BOLD}nvcr${RESET}"
+ echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
+ echo -e "${YELLOW}-------------------------------------------------${RESET}"
+}
+
+# 定义Docker容器服务名称
+CONTAINER_SERVICES() {
+ services=(
+ "dockerhub"
+ "gcr"
+ "ghcr"
+ "quay"
+ "k8sgcr"
+ "k8s"
+ "mcr"
+ "elastic"
+ "nvcr"
+ )
+}
+
+REGISTRY_FILES() {
+ files=(
+ "dockerhub registry-hub.yml"
+ "gcr registry-gcr.yml"
+ "ghcr registry-ghcr.yml"
+ "quay registry-quay.yml"
+ "k8sgcr registry-k8sgcr.yml"
+ "k8s registry-k8s.yml"
+ "mcr registry-mcr.yml"
+ "elastic registry-elastic.yml"
+ "nvcr registry-nvcr.yml"
+ )
+}
function CHECK_OS() {
SEPARATOR "检查环境"
@@ -482,7 +545,7 @@ fi
function CONFIG_CADDY() {
SEPARATOR "配置Caddy"
while true; do
- INFO "${LIGHT_GREEN}>>> 域名解析主机记录(即域名前缀):${RESET} ${LIGHT_CYAN}ui、hub、gcr、ghcr、k8sgcr、k8s、quay、mcr、elastic${RESET}"
+ INFO "${LIGHT_GREEN}>>> 域名解析主机记录(即域名前缀):${RESET} ${LIGHT_CYAN}${REGISTRY_SLD}${RESET}"
WARN "${LIGHT_GREEN}>>> 只需选择你部署的服务进行解析即可${RESET},${LIGHT_YELLOW}无需将上面提示中所有的主机记录进行解析${RESET}"
read -e -p "$(WARN "是否配置Caddy,实现自动HTTPS? 执行前需在DNS服务商对部署服务解析主机记录 ${PROMPT_YES_NO}")" caddy_conf
case "$caddy_conf" in
@@ -491,7 +554,7 @@ while true; do
read -e -p "$(INFO "请输入要配置的${LIGHT_MAGENTA}主机记录${RESET},用逗号分隔${LIGHT_BLUE}[例: ui,hub]${RESET}: ")" selected_records
# 验证输入的主机记录
- local valid_records=("ui" "hub" "gcr" "ghcr" "k8sgcr" "k8s" "quay" "mcr" "elastic")
+ local valid_records=("${RECORDS[@]}")
IFS=',' read -r -a records_array <<< "$selected_records"
local invalid_records=()
for record in "${records_array[@]}"; do
@@ -502,7 +565,7 @@ while true; do
if [[ ${#invalid_records[@]} -gt 0 ]]; then
ERROR "无效的主机记录: ${LIGHT_RED}${invalid_records[@]}${RESET}"
- INFO "请输入有效的主机记录: ${LIGHT_GREEN}ui、hub、gcr、ghcr、k8sgcr、k8s、quay、mcr、elastic${RESET}"
+ INFO "请输入有效的主机记录: ${LIGHT_GREEN}${REGISTRY_SLD}${RESET}"
continue
fi
@@ -581,6 +644,14 @@ while true; do
header_up X-Forwarded-For {remote_addr}
header_up X-Nginx-Proxy true
}
+}"
+ record_templates[nvcr]="nvcr.$caddy_domain {
+ reverse_proxy localhost:59000 {
+ header_up Host {host}
+ header_up X-Real-IP {remote_addr}
+ header_up X-Forwarded-For {remote_addr}
+ header_up X-Nginx-Proxy true
+ }
}"
> /etc/caddy/Caddyfile
for record in "${records_array[@]}"; do
@@ -715,7 +786,7 @@ function CONFIG_NGINX() {
SEPARATOR "配置Nginx"
while true; do
WARN "自行安装的 Nginx ${LIGHT_RED}请勿执行此操作${RESET},${LIGHT_BLUE}以防覆盖原有配置${RESET}"
- INFO "${LIGHT_GREEN}>>> 域名解析主机记录(即域名前缀):${RESET} ${LIGHT_CYAN}ui、hub、gcr、ghcr、k8sgcr、k8s、quay、mcr、elastic${RESET}"
+ INFO "${LIGHT_GREEN}>>> 域名解析主机记录(即域名前缀):${RESET} ${LIGHT_CYAN}${REGISTRY_SLD}${RESET}"
WARN "${LIGHT_GREEN}>>> 只需选择你部署的服务进行解析即可${RESET},${LIGHT_YELLOW}无需将上面提示中所有的主机记录进行解析${RESET}"
read -e -p "$(WARN "是否配置 Nginx?配置完成后需在DNS服务商解析主机记录 ${PROMPT_YES_NO}")" nginx_conf
case "$nginx_conf" in
@@ -724,7 +795,7 @@ while true; do
read -e -p "$(INFO "请输入要配置的${LIGHT_MAGENTA}主机记录${RESET},用逗号分隔${LIGHT_BLUE}[例: ui,hub]${RESET}: ")" selected_records
# 验证输入的主机记录
- local valid_records=("ui" "hub" "gcr" "ghcr" "k8sgcr" "k8s" "quay" "mcr" "elastic")
+ local valid_records=("${RECORDS[@]}")
IFS=',' read -r -a records_array <<< "$selected_records"
local invalid_records=()
for record in "${records_array[@]}"; do
@@ -735,7 +806,7 @@ while true; do
if [[ ${#invalid_records[@]} -gt 0 ]]; then
ERROR "无效的主机记录: ${LIGHT_RED}${invalid_records[@]}${RESET}"
- INFO "请输入有效的主机记录: ${LIGHT_GREEN}ui、hub、gcr、ghcr、k8sgcr、k8s、quay、mcr、elastic${RESET}"
+ INFO "请输入有效的主机记录: ${LIGHT_GREEN}${REGISTRY_SLD}${RESET}"
continue
fi
@@ -983,6 +1054,33 @@ while true; do
proxy_buffering off;
proxy_redirect off;
}
+}"
+ record_templates[nvcr]="server {
+ listen 80;
+ #listen 443 ssl;
+ server_name nvcr.$nginx_domain;
+ #ssl_certificate /path/to/your_domain_name.crt;
+ #ssl_certificate_key /path/to/your_domain_name.key;
+ #ssl_session_timeout 1d;
+ #ssl_session_cache shared:SSL:50m;
+ #ssl_session_tickets off;
+ #ssl_protocols TLSv1.2 TLSv1.3;
+ #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
+ #ssl_prefer_server_ciphers on;
+ #ssl_buffer_size 8k;
+ proxy_connect_timeout 600;
+ proxy_send_timeout 600;
+ proxy_read_timeout 600;
+ send_timeout 600;
+ location / {
+ proxy_pass http://localhost:59000;
+ proxy_set_header Host \$host;
+ proxy_set_header X-Real-IP \$remote_addr;
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
+ proxy_set_header X-Nginx-Proxy true;
+ proxy_buffering off;
+ proxy_redirect off;
+ }
}"
> /etc/nginx/conf.d/docker-proxy.conf
for record in "${records_array[@]}"; do
@@ -1324,7 +1422,6 @@ function update_docker_registry_url() {
fi
}
-
function CONFIG_FILES() {
while true; do
read -e -p "$(INFO "安装环境确认 [${LIGHT_GREEN}国外输1${RESET} ${LIGHT_YELLOW}国内输2${RESET}] > ")" install_docker_reg
@@ -1339,6 +1436,7 @@ while true; do
"k8s reg-k8s ${GITRAW}/config/registry-k8s.yml"
"mcr reg-mcr ${GITRAW}/config/registry-mcr.yml"
"elastic reg-elastic ${GITRAW}/config/registry-elastic.yml"
+ "nvcr reg-nvcr ${GITRAW}/config/registry-nvcr.yml"
)
break;;
2 )
@@ -1351,6 +1449,7 @@ while true; do
"k8s reg-k8s ${CNGITRAW}/config/registry-k8s.yml"
"mcr reg-mcr ${CNGITRAW}/config/registry-mcr.yml"
"elastic reg-elastic ${CNGITRAW}/config/registry-elastic.yml"
+ "nvcr reg-nvcr ${CNGITRAW}/config/registry-nvcr.yml"
)
break;;
* )
@@ -1364,27 +1463,27 @@ function DOWN_CONFIG() {
selected_files=()
selected_containers=()
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
- echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
- echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
- echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
- echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
- echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
- echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
- echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
- echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
- echo -e "${GREEN}9)${RESET} ${BOLD}all${RESET}"
- echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
-
+ REGISTRY_MENU
read -e -p "$(INFO "输入序号下载对应配置文件,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all下载所有${RESET} > ")" choices_reg
- while [[ ! "$choices_reg" =~ ^([0-9]+[[:space:]]*)+$ ]]; do
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
+
+ while true; do
+ if [[ "$choices_reg" =~ ^[0-9]+([[:space:]][0-9]+)*$ ]]; then
+ valid=true
+ for choice in $choices_reg; do
+ if ((choice < 0 || choice > 10)); then
+ valid=false
+ break
+ fi
+ done
+ if $valid; then
+ break
+ fi
+ fi
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-10 ${RESET}序号"
read -e -p "$(INFO "输入序号下载对应配置文件,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all下载所有${RESET} > ")" choices_reg
done
-
- if [[ "$choices_reg" == "9" ]]; then
+ if [[ "$choices_reg" == "10" ]]; then
for file in "${files[@]}"; do
file_name=$(echo "$file" | cut -d' ' -f1)
container_name=$(echo "$file" | cut -d' ' -f2)
@@ -1400,7 +1499,7 @@ function DOWN_CONFIG() {
return
else
for choice in ${choices_reg}; do
- if [[ $choice =~ ^[0-9]+$ ]] && ((choice > 0 && choice <= ${#files[@]})); then
+ if ((choice > 0 && choice < 10)); then
file_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f1)
container_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f2)
file_url=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f3-)
@@ -1408,8 +1507,6 @@ function DOWN_CONFIG() {
selected_containers+=("$container_name")
selected_files+=("$file_url")
wget -NP ${PROXY_DIR}/ $file_url &>/dev/null
- else
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
fi
done
@@ -2061,19 +2158,6 @@ esac
function SVC_MGMT() {
CHECK_COMPOSE_CMD
-# 定义Docker容器服务名称
-CONTAINER_SERVICES() {
- services=(
- "dockerhub"
- "gcr"
- "ghcr"
- "quay"
- "k8sgcr"
- "k8s"
- "mcr"
- "elastic"
- )
-}
RESTART_SERVICE() {
CONTAINER_SERVICES
@@ -2081,22 +2165,28 @@ RESTART_SERVICE() {
selected_services=()
WARN "重启服务请在${LIGHT_GREEN}${DOCKER_COMPOSE_FILE}${RESET}文件存储目录下执行脚本.默认安装路径: ${LIGHT_BLUE}${PROXY_DIR}${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
- echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
- echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
- echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
- echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
- echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
- echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
- echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
- echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
- echo -e "${GREEN}9)${RESET} ${BOLD}all${RESET}"
- echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
+
+ REGISTRY_MENU
+ read -e -p "$(INFO "输入序号选择对应服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all表示所有${RESET} > ")" restart_service
+
+ while true; do
+ if [[ "$restart_service" =~ ^[0-9]+([[:space:]][0-9]+)*$ ]]; then
+ valid=true
+ for choice in $restart_service; do
+ if ((choice < 0 || choice > 10)); then
+ valid=false
+ break
+ fi
+ done
+ if $valid; then
+ break
+ fi
+ fi
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-10 ${RESET}序号"
+ read -e -p "$(INFO "输入序号选择对应服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all表示所有${RESET} > ")" restart_service
+ done
- read -e -p "$(INFO "输入序号选择对应服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all选择所有${RESET} > ")" restart_service
-
- if [[ "$restart_service" == "9" ]]; then
+ if [[ "$restart_service" == "10" ]]; then
for service_name in "${services[@]}"; do
if $DOCKER_COMPOSE_CMD ps --services 2>/dev/null | grep -q "^${service_name}$"; then
selected_services+=("$service_name")
@@ -2104,13 +2194,17 @@ RESTART_SERVICE() {
WARN "服务 ${service_name}未运行,跳过重启。"
fi
done
- INFO "重启的服务: ${selected_services[*]}"
+ if [ ${#selected_services[@]} -eq 0 ]; then
+ WARN "选择的服务未运行,无需进行重启"
+ else
+ INFO "更新的服务: ${selected_services[*]}"
+ fi
elif [[ "$restart_service" == "0" ]]; then
WARN "退出重启服务!"
- exit 1
+ return
else
for choice in ${restart_service}; do
- if [[ $choice =~ ^[0-9]+$ ]] && ((choice >0 && choice <= ${#services[@]})); then
+ if ((choice > 0 && choice < 10)); then
service_name="${services[$((choice -1))]}"
if $DOCKER_COMPOSE_CMD ps --services 2>/dev/null | grep -q "^${service_name}$"; then
selected_services+=("$service_name")
@@ -2123,7 +2217,11 @@ RESTART_SERVICE() {
RESTART_SERVICE # 选择无效重新调用当前函数进行选择
fi
done
- INFO "重启的服务: ${selected_services[*]}"
+ if [ ${#selected_services[@]} -eq 0 ]; then
+ WARN "选择的服务未运行,无需进行重启"
+ else
+ INFO "更新的服务: ${selected_services[*]}"
+ fi
fi
}
@@ -2131,22 +2229,28 @@ UPDATE_SERVICE() {
CONTAINER_SERVICES
selected_services=()
WARN "更新服务请在${LIGHT_GREEN}${DOCKER_COMPOSE_FILE}${RESET}文件存储目录下执行脚本.默认安装路径: ${LIGHT_BLUE}${PROXY_DIR}${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
- echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
- echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
- echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
- echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
- echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
- echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
- echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
- echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
- echo -e "${GREEN}9)${RESET} ${BOLD}all${RESET}"
- echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
- read -e -p "$(INFO "输入序号选择对应服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all选择所有${RESET} > ")" choices_service
+ REGISTRY_MENU
+ read -e -p "$(INFO "输入序号选择对应服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all表示所有${RESET} > ")" update_service
- if [[ "$choices_service" == "9" ]]; then
+ while true; do
+ if [[ "$update_service" =~ ^[0-9]+([[:space:]][0-9]+)*$ ]]; then
+ valid=true
+ for choice in $update_service; do
+ if ((choice < 0 || choice > 10)); then
+ valid=false
+ break
+ fi
+ done
+ if $valid; then
+ break
+ fi
+ fi
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-10 ${RESET}序号"
+ read -e -p "$(INFO "输入序号选择对应服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all表示所有${RESET} > ")" update_service
+ done
+
+ if [[ "$update_service" == "10" ]]; then
for service_name in "${services[@]}"; do
if $DOCKER_COMPOSE_CMD ps --services 2>/dev/null | grep -q "^${service_name}$"; then
selected_services+=("$service_name")
@@ -2154,13 +2258,17 @@ UPDATE_SERVICE() {
WARN "服务 ${service_name}未运行,跳过更新。"
fi
done
- INFO "更新的服务: ${selected_services[*]}"
- elif [[ "$choices_service" == "0" ]]; then
+ if [ ${#selected_services[@]} -eq 0 ]; then
+ WARN "选择的服务未运行,无法进行更新"
+ else
+ INFO "更新的服务: ${selected_services[*]}"
+ fi
+ elif [[ "$update_service" == "0" ]]; then
WARN "退出更新服务!"
- exit 1
+ return
else
- for choice in ${choices_service}; do
- if [[ $choice =~ ^[0-9]+$ ]] && ((choice >0 && choice <= ${#services[@]})); then
+ for choice in ${update_service}; do
+ if ((choice > 0 && choice < 10)); then
service_name="${services[$((choice -1))]}"
if $DOCKER_COMPOSE_CMD ps --services 2>/dev/null | grep -q "^${service_name}$"; then
selected_services+=("$service_name")
@@ -2173,30 +2281,25 @@ UPDATE_SERVICE() {
UPDATE_SERVICE # 选择无效重新调用当前函数进行选择
fi
done
- INFO "更新的服务: ${selected_services[*]}"
+
+ if [ ${#selected_services[@]} -eq 0 ]; then
+ WARN "选择的服务未运行,无法进行更新"
+ else
+ INFO "更新的服务: ${selected_services[*]}"
+ fi
fi
}
CONTAIENR_LOGS() {
CONTAINER_SERVICES
selected_services=()
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
- echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
- echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
- echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
- echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
- echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
- echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
- echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
- echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
- echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
+ REGISTRY_SER_MENU
read -e -p "$(INFO "输入序号选择对应服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项. ${LIGHT_CYAN}all选择所有${RESET} > ")" restart_service
if [[ "$restart_service" == "0" ]]; then
WARN "退出查看容器服务日志操作!"
- exit 1
+ return
else
for choice in ${restart_service}; do
if [[ $choice =~ ^[0-9]+$ ]] && ((choice >0 && choice <= ${#services[@]})); then
@@ -2207,11 +2310,15 @@ CONTAIENR_LOGS() {
WARN "服务 ${service_name} 未运行,无法查看容器日志。"
fi
else
- ERROR "无效的选择: $choice. 请重新${LIGHT_GREEN}选择0-8${RESET}的选项"
+ ERROR "无效的选择: $choice. 请重新${LIGHT_GREEN}选择0-9${RESET}的选项"
CONTAIENR_LOGS # 选择无效重新调用当前函数进行选择
fi
done
- INFO "查看日志的服务: ${selected_services[*]}"
+ if [ ${#selected_services[@]} -eq 0 ]; then
+ WARN "选择的服务未运行,无法查看日志"
+ else
+ INFO "查看日志的服务: ${selected_services[*]}"
+ fi
fi
}
@@ -2220,30 +2327,10 @@ MODIFY_SERVICE_TTL_CONFIG() {
selected_files=()
existing_files=()
non_existing_files=()
-
- files=(
- "dockerhub registry-hub.yml"
- "gcr registry-gcr.yml"
- "ghcr registry-ghcr.yml"
- "quay registry-quay.yml"
- "k8sgcr registry-k8sgcr.yml"
- "k8s registry-k8s.yml"
- "mcr registry-mcr.yml"
- "elastic registry-elastic.yml"
- )
+ REGISTRY_FILES
while true; do
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
- echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
- echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
- echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
- echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
- echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
- echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
- echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
- echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
- echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
+ REGISTRY_SER_MENU
read -e -p "$(INFO "输入序号修改服务对应配置文件,${LIGHT_YELLOW}空格分隔${RESET}多个选项 > ")" ttl_service
if [[ "$ttl_service" == "0" ]]; then
@@ -2252,7 +2339,7 @@ MODIFY_SERVICE_TTL_CONFIG() {
elif [[ "$ttl_service" =~ ^([1-8]+[[:space:]]*)+$ ]]; then
break
else
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-8 ${RESET}序号"
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
fi
done
@@ -2306,93 +2393,14 @@ MODIFY_SERVICE_TTL_CONFIG() {
fi
}
### 启动新容器
-START_NEW_SERVER_CONFIG_FILES() {
-while true; do
- read -e -p "$(INFO "安装环境确认 [${LIGHT_GREEN}国外输1${RESET} ${LIGHT_YELLOW}国内输2${RESET}] > ")" install_docker_reg
- case "$install_docker_reg" in
- 1 )
- files=(
- "dockerhub reg-docker-hub ${GITRAW}/config/registry-hub.yml"
- "gcr reg-gcr ${GITRAW}/config/registry-gcr.yml"
- "ghcr reg-ghcr ${GITRAW}/config/registry-ghcr.yml"
- "quay reg-quay ${GITRAW}/config/registry-quay.yml"
- "k8sgcr reg-k8s-gcr ${GITRAW}/config/registry-k8sgcr.yml"
- "k8s reg-k8s ${GITRAW}/config/registry-k8s.yml"
- "mcr reg-mcr ${GITRAW}/config/registry-mcr.yml"
- "elastic reg-elastic ${GITRAW}/config/registry-elastic.yml"
- )
- break;;
- 2 )
- files=(
- "dockerhub reg-docker-hub ${CNGITRAW}/config/registry-hub.yml"
- "gcr reg-gcr ${CNGITRAW}/config/registry-gcr.yml"
- "ghcr reg-ghcr ${CNGITRAW}/config/registry-ghcr.yml"
- "quay reg-quay ${CNGITRAW}/config/registry-quay.yml"
- "k8sgcr reg-k8s-gcr ${CNGITRAW}/config/registry-k8sgcr.yml"
- "k8s reg-k8s ${CNGITRAW}/config/registry-k8s.yml"
- "mcr reg-mcr ${CNGITRAW}/config/registry-mcr.yml"
- "elastic reg-elastic ${CNGITRAW}/config/registry-elastic.yml"
- )
- break;;
- * )
- INFO "请输入 ${LIGHT_GREEN}1${RESET} 表示国外 或者 ${LIGHT_YELLOW}2${RESET} 表示大陆";;
- esac
-done
-}
-
-START_NEW_SERVER_CONFIG_FILES() {
-while true; do
- read -e -p "$(INFO "安装环境确认 [${LIGHT_GREEN}国外输1${RESET} ${LIGHT_YELLOW}国内输2${RESET}] > ")" install_docker_reg
- case "$install_docker_reg" in
- 1 )
- files=(
- "dockerhub reg-docker-hub ${GITRAW}/config/registry-hub.yml"
- "gcr reg-gcr ${GITRAW}/config/registry-gcr.yml"
- "ghcr reg-ghcr ${GITRAW}/config/registry-ghcr.yml"
- "quay reg-quay ${GITRAW}/config/registry-quay.yml"
- "k8sgcr reg-k8s-gcr ${GITRAW}/config/registry-k8sgcr.yml"
- "k8s reg-k8s ${GITRAW}/config/registry-k8s.yml"
- "mcr reg-mcr ${GITRAW}/config/registry-mcr.yml"
- "elastic reg-elastic ${GITRAW}/config/registry-elastic.yml"
- )
- break;;
- 2 )
- files=(
- "dockerhub reg-docker-hub ${CNGITRAW}/config/registry-hub.yml"
- "gcr reg-gcr ${CNGITRAW}/config/registry-gcr.yml"
- "ghcr reg-ghcr ${CNGITRAW}/config/registry-ghcr.yml"
- "quay reg-quay ${CNGITRAW}/config/registry-quay.yml"
- "k8sgcr reg-k8s-gcr ${CNGITRAW}/config/registry-k8sgcr.yml"
- "k8s reg-k8s ${CNGITRAW}/config/registry-k8s.yml"
- "mcr reg-mcr ${CNGITRAW}/config/registry-mcr.yml"
- "elastic reg-elastic ${CNGITRAW}/config/registry-elastic.yml"
- )
- break;;
- * )
- INFO "请输入 ${LIGHT_GREEN}1${RESET} 表示国外 或者 ${LIGHT_YELLOW}2${RESET} 表示大陆";;
- esac
-done
-}
-
START_NEW_SERVER_DOWN_CONFIG() {
selected_names=()
selected_files=()
selected_containers=()
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
- echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
- echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
- echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
- echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
- echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
- echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
- echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
- echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
- echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
- echo -e "${YELLOW}-------------------------------------------------${RESET}"
-
+ REGISTRY_SER_MENU
read -e -p "$(INFO "输入序号下载对应配置文件,${LIGHT_YELLOW}空格分隔${RESET}多个选项 > ")" choices_newser
- while [[ ! "$choices_newser" =~ ^([0-8]+[[:space:]]*)+$ ]]; do
+ while [[ ! "$choices_newser" =~ ^([0-9]+[[:space:]]*)+$ ]]; do
WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
read -e -p "$(INFO "输入序号下载对应配置文件,${LIGHT_YELLOW}空格分隔${RESET}多个选项 > ")" choices_newser
done
@@ -2412,7 +2420,7 @@ START_NEW_SERVER_DOWN_CONFIG() {
selected_files+=("$file_url")
wget -NP ${PROXY_DIR}/ $file_url &>/dev/null
else
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-8 ${RESET}序号"
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
fi
done
fi
@@ -2439,7 +2447,7 @@ START_NEW_SERVER_DOWN_CONFIG() {
START_NEW_DOCKER_SERVICE() {
if [ -d "${PROXY_DIR}" ]; then
if [ -f "${PROXY_DIR}/${DOCKER_COMPOSE_FILE}" ]; then
- START_NEW_SERVER_CONFIG_FILES
+ CONFIG_FILES
START_NEW_SERVER_DOWN_CONFIG
PROXY_HTTP
INFO "正在启动新的容器服务,请稍等..."
@@ -2622,35 +2630,13 @@ esac
function UNI_DOCKER_SERVICE() {
CHECK_COMPOSE_CMD
RM_SERVICE() {
-
selected_containers=()
-
-files=(
- "dockerhub registry-hub.yml"
- "gcr registry-gcr.yml"
- "ghcr registry-ghcr.yml"
- "quay registry-quay.yml"
- "k8sgcr registry-k8sgcr.yml"
- "k8s registry-k8s.yml"
- "mcr registry-mcr.yml"
- "elastic registry-elastic.yml"
-)
-
-echo -e "${YELLOW}-------------------------------------------------${RESET}"
-echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
-echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
-echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
-echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
-echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
-echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
-echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
-echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
-echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
-echo -e "${YELLOW}-------------------------------------------------${RESET}"
+REGISTRY_FILES
+REGISTRY_SER_MENU
read -e -p "$(INFO "输入序号删除服务和对应配置文件,${LIGHT_YELLOW}空格分隔${RESET}多个选项 > ")" rm_service
-while [[ ! "$rm_service" =~ ^([0-8]+[[:space:]]*)+$ ]]; do
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-8 ${RESET}序号"
+while [[ ! "$rm_service" =~ ^([0-9]+[[:space:]]*)+$ ]]; do
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
read -e -p "$(INFO "输入序号删除服务和对应配置文件,${LIGHT_YELLOW}空格分隔${RESET}多个选项 > ")" rm_service
done
@@ -2660,7 +2646,7 @@ if [[ "$rm_service" == "0" ]]; then
else
selected_services=()
for choice in ${rm_service}; do
- if [[ $choice =~ ^[0-8]+$ ]] && ((choice > 0 && choice <= ${#files[@]})); then
+ if [[ $choice =~ ^[0-9]+$ ]] && ((choice > 0 && choice <= ${#files[@]})); then
file_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f2)
service_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f1)
@@ -2677,7 +2663,7 @@ else
WARN "配置文件 ${LIGHT_CYAN}${file_name}${RESET} 不存在,${LIGHT_YELLOW}无需删除${RESET}"
fi
else
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-8 ${RESET}序号"
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
UNI_DOCKER_SERVICE
return
fi
@@ -2827,32 +2813,11 @@ AUTH_MENU() {
CHECK_REG_AUTH
selected_files=()
selected_services=()
-files=(
- "dockerhub registry-hub.yml"
- "gcr registry-gcr.yml"
- "ghcr registry-ghcr.yml"
- "quay registry-quay.yml"
- "k8sgcr registry-k8sgcr.yml"
- "k8s registry-k8s.yml"
- "mcr registry-mcr.yml"
- "elastic registry-elastic.yml"
-)
-
-echo -e "${YELLOW}-------------------------------------------------${RESET}"
-echo -e "${GREEN}1)${RESET} ${BOLD}docker hub${RESET}"
-echo -e "${GREEN}2)${RESET} ${BOLD}gcr${RESET}"
-echo -e "${GREEN}3)${RESET} ${BOLD}ghcr${RESET}"
-echo -e "${GREEN}4)${RESET} ${BOLD}quay${RESET}"
-echo -e "${GREEN}5)${RESET} ${BOLD}k8s-gcr${RESET}"
-echo -e "${GREEN}6)${RESET} ${BOLD}k8s${RESET}"
-echo -e "${GREEN}7)${RESET} ${BOLD}mcr${RESET}"
-echo -e "${GREEN}8)${RESET} ${BOLD}elastic${RESET}"
-echo -e "${GREEN}0)${RESET} ${BOLD}exit${RESET}"
-echo -e "${YELLOW}-------------------------------------------------${RESET}"
-
+REGISTRY_FILES
+REGISTRY_SER_MENU
read -e -p "$(INFO "输入序号选择添加认证的服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项 > ")" auth_service
-while [[ ! "$auth_service" =~ ^([0-8]+[[:space:]]*)+$ ]]; do
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-8 ${RESET}序号"
+while [[ ! "$auth_service" =~ ^([0-9]+[[:space:]]*)+$ ]]; do
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
read -e -p "$(INFO "输入序号选择添加认证的服务,${LIGHT_YELLOW}空格分隔${RESET}多个选项 > ")" auth_service
done
}
@@ -2948,7 +2913,7 @@ if [[ "$auth_service" == "0" ]]; then
return
else
for choice in ${auth_service}; do
- if [[ $choice =~ ^[0-8]+$ ]] && ((choice > 0 && choice <= ${#files[@]})); then
+ if [[ $choice =~ ^[0-9]+$ ]] && ((choice > 0 && choice <= ${#files[@]})); then
file_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f2)
service_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f1)
selected_files+=("$file_name")
@@ -2960,7 +2925,7 @@ else
fi
else
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-8 ${RESET}序号"
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
AUTH_MENU
return
fi
@@ -3014,7 +2979,7 @@ if [[ "$auth_service" == "0" ]]; then
return
else
for choice in ${auth_service}; do
- if [[ $choice =~ ^[0-8]+$ ]] && ((choice > 0 && choice <= ${#files[@]})); then
+ if [[ $choice =~ ^[0-9]+$ ]] && ((choice > 0 && choice <= ${#files[@]})); then
file_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f2)
service_name=$(echo "${files[$((choice - 1))]}" | cut -d' ' -f1)
selected_files+=("$file_name")
@@ -3026,7 +2991,7 @@ else
fi
else
- WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-8 ${RESET}序号"
+ WARN "无效输入,请重新输入${LIGHT_YELLOW} 0-9 ${RESET}序号"
AUTH_MENU
return
fi
@@ -3257,7 +3222,6 @@ case $ipblack_choice in
esac
}
-
# 其他工具
function OtherTools() {
echo -e "1) 设置${BOLD}${YELLOW}系统命令${RESET}"
@@ -3285,10 +3249,8 @@ case $main_choice in
sleep 2; main_menu
;;
esac
-
}
-
## 主菜单
function main_menu() {
echo -e "╔════════════════════════════════════════════════════╗"