Update Docker 加速
This commit is contained in:
449
Docker 加速
449
Docker 加速
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Docker镜像源配置脚本
|
# Docker镜像源配置脚本
|
||||||
# 描述: 配置Docker使用不同的镜像源,以私有仓库为主,其他源为备
|
# 描述: 配置Docker使用不同的镜像源,支持私有仓库(可选认证)和公共镜像源
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
@@ -14,9 +14,9 @@ PURPLE='\033[0;35m'
|
|||||||
CYAN='\033[0;36m'
|
CYAN='\033[0;36m'
|
||||||
NC='\033[0m' # No Color
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
# 镜像源配置 - 以您的私有源为主
|
# 默认私有仓库配置(用户可自定义)
|
||||||
PRIVATE_REGISTRY="github.vps7k7k.xyz"
|
DEFAULT_PRIVATE_REGISTRY="github.vps7k7k.xyz"
|
||||||
PRIVATE_MIRROR="https://github.vps7k7k.xyz"
|
DEFAULT_PRIVATE_MIRROR="https://github.vps7k7k.xyz"
|
||||||
|
|
||||||
# 备用镜像源
|
# 备用镜像源
|
||||||
ALIYUN_MIRROR="https://registry.cn-hangzhou.aliyuncs.com"
|
ALIYUN_MIRROR="https://registry.cn-hangzhou.aliyuncs.com"
|
||||||
@@ -58,84 +58,251 @@ check_docker() {
|
|||||||
print_info "Docker 已安装,版本: $(docker --version | cut -d' ' -f3 | cut -d',' -f1)"
|
print_info "Docker 已安装,版本: $(docker --version | cut -d' ' -f3 | cut -d',' -f1)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 获取私有仓库配置
|
||||||
|
get_private_registry_config() {
|
||||||
|
echo
|
||||||
|
print_step "配置私有仓库"
|
||||||
|
|
||||||
|
# 询问是否使用私有仓库
|
||||||
|
read -p "是否使用私有仓库?(y/N): " use_private
|
||||||
|
if [[ ! $use_private =~ ^[Yy]$ ]]; then
|
||||||
|
PRIVATE_REGISTRY=""
|
||||||
|
PRIVATE_MIRROR=""
|
||||||
|
NEED_AUTH="no"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 输入私有仓库域名
|
||||||
|
read -p "请输入私有仓库域名/地址 [默认: $DEFAULT_PRIVATE_REGISTRY]: " registry_input
|
||||||
|
if [ -z "$registry_input" ]; then
|
||||||
|
PRIVATE_REGISTRY="$DEFAULT_PRIVATE_REGISTRY"
|
||||||
|
PRIVATE_MIRROR="$DEFAULT_PRIVATE_MIRROR"
|
||||||
|
else
|
||||||
|
PRIVATE_REGISTRY="$registry_input"
|
||||||
|
# 自动构建镜像URL(添加https前缀,如果不是完整URL)
|
||||||
|
if [[ "$registry_input" =~ ^https?:// ]]; then
|
||||||
|
PRIVATE_MIRROR="$registry_input"
|
||||||
|
else
|
||||||
|
PRIVATE_MIRROR="https://$registry_input"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "私有仓库地址: $PRIVATE_REGISTRY"
|
||||||
|
print_info "镜像地址: $PRIVATE_MIRROR"
|
||||||
|
|
||||||
|
# 询问是否需要认证
|
||||||
|
read -p "私有仓库是否需要认证登录?(y/N): " need_auth
|
||||||
|
if [[ $need_auth =~ ^[Yy]$ ]]; then
|
||||||
|
NEED_AUTH="yes"
|
||||||
|
get_private_credentials
|
||||||
|
else
|
||||||
|
NEED_AUTH="no"
|
||||||
|
print_info "私有仓库无需认证"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 交互式输入私有仓库账号密码
|
||||||
|
get_private_credentials() {
|
||||||
|
print_step "请输入私有仓库的认证信息"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
read -p "请输入用户名: " PRIVATE_USERNAME
|
||||||
|
if [ -n "$PRIVATE_USERNAME" ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
print_error "用户名不能为空,请重新输入"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
read -s -p "请输入密码: " PRIVATE_PASSWORD
|
||||||
|
echo
|
||||||
|
if [ -n "$PRIVATE_PASSWORD" ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
print_error "密码不能为空,请重新输入"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 确认密码
|
||||||
|
while true; do
|
||||||
|
read -s -p "请再次输入密码确认: " password_confirm
|
||||||
|
echo
|
||||||
|
if [ "$PRIVATE_PASSWORD" = "$password_confirm" ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
print_error "两次输入的密码不一致,请重新输入"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# 测试私有仓库登录
|
||||||
|
test_private_login() {
|
||||||
|
if [ "$NEED_AUTH" != "yes" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_step "测试登录私有仓库..."
|
||||||
|
|
||||||
|
if echo "$PRIVATE_PASSWORD" | docker login $PRIVATE_REGISTRY -u "$PRIVATE_USERNAME" --password-stdin; then
|
||||||
|
print_info "私有仓库登录测试成功!"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
print_error "私有仓库登录测试失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# 显示镜像源选择菜单
|
# 显示镜像源选择菜单
|
||||||
show_mirror_menu() {
|
show_mirror_menu() {
|
||||||
echo
|
echo
|
||||||
print_step "请选择要使用的Docker镜像源配置:"
|
print_step "请选择要使用的Docker镜像源配置:"
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
print_choice "1. 私有仓库为主 + 多个备用源(推荐)"
|
|
||||||
echo " - 主源: ${PRIVATE_REGISTRY}"
|
if [ -n "$PRIVATE_REGISTRY" ]; then
|
||||||
echo " - 备源: 阿里云、网易、中科大、腾讯云"
|
print_choice "1. 私有仓库为主 + 多个备用源(推荐)"
|
||||||
echo " - Docker自动选择最快可用源"
|
echo " - 主源: ${PRIVATE_REGISTRY}"
|
||||||
print_choice "2. 仅私有仓库"
|
echo " - 备源: 阿里云、网易、中科大、腾讯云"
|
||||||
echo " - 只使用 ${PRIVATE_REGISTRY}"
|
echo " - Docker自动选择最快可用源"
|
||||||
echo " - 需要账号密码认证"
|
print_choice "2. 仅私有仓库"
|
||||||
echo " - 访问速度最快"
|
echo " - 只使用 ${PRIVATE_REGISTRY}"
|
||||||
print_choice "3. 仅公共镜像源"
|
echo " - 访问速度最快"
|
||||||
echo " - 不使用私有仓库"
|
print_choice "3. 私有仓库 + 公共镜像源混合"
|
||||||
echo " - 使用阿里云、网易、中科大、腾讯云"
|
echo " - 使用私有仓库和部分公共镜像源"
|
||||||
print_choice "4. 官方Docker Hub"
|
print_choice "4. 仅公共镜像源"
|
||||||
echo " - 官方源,镜像最全"
|
echo " - 不使用私有仓库"
|
||||||
echo " - 国外源,访问可能较慢"
|
echo " - 使用阿里云、网易、中科大、腾讯云"
|
||||||
print_choice "5. 自定义配置"
|
print_choice "5. 官方Docker Hub"
|
||||||
echo " - 手动选择镜像源组合"
|
echo " - 官方源,镜像最全"
|
||||||
|
echo " - 国外源,访问可能较慢"
|
||||||
|
else
|
||||||
|
print_choice "1. 仅公共镜像源"
|
||||||
|
echo " - 使用阿里云、网易、中科大、腾讯云"
|
||||||
|
print_choice "2. 官方Docker Hub"
|
||||||
|
echo " - 官方源,镜像最全"
|
||||||
|
echo " - 国外源,访问可能较慢"
|
||||||
|
print_choice "3. 自定义公共镜像源"
|
||||||
|
echo " - 手动选择公共镜像源组合"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
}
|
}
|
||||||
|
|
||||||
# 获取用户选择的镜像源
|
# 获取用户选择的镜像源
|
||||||
get_mirror_choice() {
|
get_mirror_choice() {
|
||||||
while true; do
|
if [ -n "$PRIVATE_REGISTRY" ]; then
|
||||||
read -p "请输入选择 (1-5): " choice
|
# 有私有仓库的情况
|
||||||
|
while true; do
|
||||||
|
read -p "请输入选择 (1-5): " choice
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
MIRROR_TYPE="private_primary"
|
||||||
|
MIRROR_NAME="私有仓库为主 + 多个备用源"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
MIRROR_TYPE="private_only"
|
||||||
|
MIRROR_NAME="仅私有仓库"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
MIRROR_TYPE="mixed"
|
||||||
|
MIRROR_NAME="私有仓库 + 公共镜像源混合"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
MIRROR_TYPE="public_only"
|
||||||
|
MIRROR_NAME="仅公共镜像源"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
MIRROR_TYPE="official"
|
||||||
|
MIRROR_NAME="官方Docker Hub"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "无效选择,请输入 1-5 的数字"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
else
|
||||||
|
# 无私有仓库的情况
|
||||||
|
while true; do
|
||||||
|
read -p "请输入选择 (1-3): " choice
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
MIRROR_TYPE="public_only"
|
||||||
|
MIRROR_NAME="仅公共镜像源"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
MIRROR_TYPE="official"
|
||||||
|
MIRROR_NAME="官方Docker Hub"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
MIRROR_TYPE="custom_public"
|
||||||
|
MIRROR_NAME="自定义公共镜像源"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "无效选择,请输入 1-3 的数字"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 混合配置选择(私有+部分公共)
|
||||||
|
get_mixed_config() {
|
||||||
|
echo
|
||||||
|
print_step "选择要添加的公共镜像源(可多选):"
|
||||||
|
|
||||||
|
MIRRORS=("$PRIVATE_MIRROR")
|
||||||
|
|
||||||
|
echo "1) 阿里云镜像"
|
||||||
|
echo "2) 网易云镜像"
|
||||||
|
echo "3) 中科大镜像"
|
||||||
|
echo "4) 腾讯云镜像"
|
||||||
|
echo "5) 官方Docker Hub"
|
||||||
|
|
||||||
|
read -p "请输入选择(多个用空格分隔,如:1 2 3): " public_choices
|
||||||
|
|
||||||
|
for choice in $public_choices; do
|
||||||
case $choice in
|
case $choice in
|
||||||
1)
|
1)
|
||||||
MIRROR_TYPE="private_primary"
|
MIRRORS+=("$ALIYUN_MIRROR")
|
||||||
MIRROR_NAME="私有仓库为主 + 多个备用源"
|
print_info "已添加阿里云镜像"
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
MIRROR_TYPE="private_only"
|
MIRRORS+=("$DOCKER_HUB_MIRROR")
|
||||||
MIRROR_NAME="仅私有仓库"
|
print_info "已添加网易云镜像"
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
MIRROR_TYPE="public_only"
|
MIRRORS+=("$USTC_MIRROR")
|
||||||
MIRROR_NAME="仅公共镜像源"
|
print_info "已添加中科大镜像"
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
MIRROR_TYPE="official"
|
MIRRORS+=("$TENCENT_MIRROR")
|
||||||
MIRROR_NAME="官方Docker Hub"
|
print_info "已添加腾讯云镜像"
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
MIRROR_TYPE="custom"
|
MIRRORS+=("https://registry-1.docker.io")
|
||||||
MIRROR_NAME="自定义配置"
|
print_info "已添加官方Docker Hub"
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
print_error "无效选择,请输入 1-5 的数字"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
MIRROR_NAME="混合镜像源(${#MIRRORS[@]}个)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 自定义配置选择
|
# 自定义公共镜像源配置
|
||||||
get_custom_config() {
|
get_custom_public_config() {
|
||||||
echo
|
echo
|
||||||
print_step "自定义镜像源配置"
|
print_step "选择要添加的公共镜像源(可多选):"
|
||||||
|
|
||||||
MIRRORS=()
|
MIRRORS=()
|
||||||
|
|
||||||
# 选择是否包含私有仓库
|
|
||||||
read -p "是否包含私有仓库 ${PRIVATE_REGISTRY}?(y/N): " include_private
|
|
||||||
if [[ $include_private =~ ^[Yy]$ ]]; then
|
|
||||||
MIRRORS+=("$PRIVATE_MIRROR")
|
|
||||||
print_info "已添加私有仓库"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 选择公共镜像源
|
|
||||||
echo
|
|
||||||
echo "请选择要添加的公共镜像源(可多选):"
|
|
||||||
echo "1) 阿里云镜像"
|
echo "1) 阿里云镜像"
|
||||||
echo "2) 网易云镜像"
|
echo "2) 网易云镜像"
|
||||||
echo "3) 中科大镜像"
|
echo "3) 中科大镜像"
|
||||||
@@ -174,63 +341,7 @@ get_custom_config() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MIRROR_NAME="自定义镜像源(${#MIRRORS[@]}个)"
|
MIRROR_NAME="自定义公共镜像源(${#MIRRORS[@]}个)"
|
||||||
}
|
|
||||||
|
|
||||||
# 交互式输入私有仓库账号密码
|
|
||||||
get_private_credentials() {
|
|
||||||
if [[ "$MIRROR_TYPE" != "private_primary" && "$MIRROR_TYPE" != "private_only" ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
print_step "请输入私有仓库的认证信息"
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
read -p "请输入用户名: " username
|
|
||||||
if [ -n "$username" ]; then
|
|
||||||
break
|
|
||||||
else
|
|
||||||
print_error "用户名不能为空,请重新输入"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
read -s -p "请输入密码: " password
|
|
||||||
echo
|
|
||||||
if [ -n "$password" ]; then
|
|
||||||
break
|
|
||||||
else
|
|
||||||
print_error "密码不能为空,请重新输入"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# 确认密码
|
|
||||||
while true; do
|
|
||||||
read -s -p "请再次输入密码确认: " password_confirm
|
|
||||||
echo
|
|
||||||
if [ "$password" = "$password_confirm" ]; then
|
|
||||||
break
|
|
||||||
else
|
|
||||||
print_error "两次输入的密码不一致,请重新输入"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# 测试私有仓库登录
|
|
||||||
test_private_login() {
|
|
||||||
if [[ "$MIRROR_TYPE" != "private_primary" && "$MIRROR_TYPE" != "private_only" ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
print_step "测试登录私有仓库..."
|
|
||||||
|
|
||||||
if echo "$password" | docker login $PRIVATE_REGISTRY -u "$username" --password-stdin; then
|
|
||||||
print_info "私有仓库登录测试成功!"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
print_error "私有仓库登录测试失败,请检查账号密码和网络连接"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 配置镜像源
|
# 配置镜像源
|
||||||
@@ -243,7 +354,7 @@ configure_mirrors() {
|
|||||||
# 备份原有配置
|
# 备份原有配置
|
||||||
if [ -f /etc/docker/daemon.json ]; then
|
if [ -f /etc/docker/daemon.json ]; then
|
||||||
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup.$(date +%Y%m%d%H%M%S)
|
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup.$(date +%Y%m%d%H%M%S)
|
||||||
print_info "已备份原有配置"
|
print_info "已备份原有配置: /etc/docker/daemon.json.backup.$(date +%Y%m%d%H%M%S)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 根据不同类型生成配置
|
# 根据不同类型生成配置
|
||||||
@@ -274,6 +385,20 @@ EOF
|
|||||||
"debug": false,
|
"debug": false,
|
||||||
"experimental": false
|
"experimental": false
|
||||||
}
|
}
|
||||||
|
EOF
|
||||||
|
;;
|
||||||
|
"mixed")
|
||||||
|
# 混合配置
|
||||||
|
mirrors_json=$(printf '"%s",' "${MIRRORS[@]}")
|
||||||
|
mirrors_json="[${mirrors_json%,}]"
|
||||||
|
|
||||||
|
cat << EOF | sudo tee /etc/docker/daemon.json > /dev/null
|
||||||
|
{
|
||||||
|
"registry-mirrors": $mirrors_json,
|
||||||
|
"insecure-registries": ["$PRIVATE_REGISTRY"],
|
||||||
|
"debug": false,
|
||||||
|
"experimental": false
|
||||||
|
}
|
||||||
EOF
|
EOF
|
||||||
;;
|
;;
|
||||||
"public_only")
|
"public_only")
|
||||||
@@ -303,20 +428,15 @@ EOF
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
;;
|
;;
|
||||||
"custom")
|
"custom_public")
|
||||||
# 自定义配置
|
# 自定义公共镜像源
|
||||||
mirrors_json=$(printf '"%s",' "${MIRRORS[@]}")
|
mirrors_json=$(printf '"%s",' "${MIRRORS[@]}")
|
||||||
mirrors_json="[${mirrors_json%,}]"
|
mirrors_json="[${mirrors_json%,}]"
|
||||||
|
|
||||||
insecure_registries="[]"
|
|
||||||
if [[ " ${MIRRORS[@]} " =~ " $PRIVATE_MIRROR " ]]; then
|
|
||||||
insecure_registries="[\"$PRIVATE_REGISTRY\"]"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat << EOF | sudo tee /etc/docker/daemon.json > /dev/null
|
cat << EOF | sudo tee /etc/docker/daemon.json > /dev/null
|
||||||
{
|
{
|
||||||
"registry-mirrors": $mirrors_json,
|
"registry-mirrors": $mirrors_json,
|
||||||
"insecure-registries": $insecure_registries,
|
"insecure-registries": [],
|
||||||
"debug": false,
|
"debug": false,
|
||||||
"experimental": false
|
"experimental": false
|
||||||
}
|
}
|
||||||
@@ -325,6 +445,7 @@ EOF
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
print_info "Docker镜像源配置完成"
|
print_info "Docker镜像源配置完成"
|
||||||
|
print_config "配置文件位置: /etc/docker/daemon.json"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 重启Docker服务
|
# 重启Docker服务
|
||||||
@@ -344,7 +465,7 @@ restart_docker() {
|
|||||||
|
|
||||||
# 保存私有仓库认证信息
|
# 保存私有仓库认证信息
|
||||||
save_private_credentials() {
|
save_private_credentials() {
|
||||||
if [[ "$MIRROR_TYPE" != "private_primary" && "$MIRROR_TYPE" != "private_only" ]]; then
|
if [ "$NEED_AUTH" != "yes" ]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -354,13 +475,16 @@ save_private_credentials() {
|
|||||||
|
|
||||||
if [[ $save_choice =~ ^[Yy]$ ]]; then
|
if [[ $save_choice =~ ^[Yy]$ ]]; then
|
||||||
# 使用Docker login保存认证信息
|
# 使用Docker login保存认证信息
|
||||||
if echo "$password" | docker login $PRIVATE_REGISTRY -u "$username" --password-stdin; then
|
if echo "$PRIVATE_PASSWORD" | docker login $PRIVATE_REGISTRY -u "$PRIVATE_USERNAME" --password-stdin; then
|
||||||
print_info "私有仓库认证信息已保存到 ~/.docker/config.json"
|
print_info "私有仓库认证信息已保存到 ~/.docker/config.json"
|
||||||
|
CREDENTIALS_SAVED="yes"
|
||||||
else
|
else
|
||||||
print_warning "私有仓库认证信息保存失败"
|
print_warning "私有仓库认证信息保存失败"
|
||||||
|
CREDENTIALS_SAVED="no"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
print_info "私有仓库认证信息未保存,拉取私有镜像时需要重新登录"
|
print_info "私有仓库认证信息未保存,拉取私有镜像时需要重新登录"
|
||||||
|
CREDENTIALS_SAVED="no"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -394,48 +518,42 @@ show_summary() {
|
|||||||
echo -e "${GREEN}✓${NC} Docker镜像源配置完成"
|
echo -e "${GREEN}✓${NC} Docker镜像源配置完成"
|
||||||
echo -e "${GREEN}✓${NC} 镜像源类型: ${MIRROR_NAME}"
|
echo -e "${GREEN}✓${NC} 镜像源类型: ${MIRROR_NAME}"
|
||||||
|
|
||||||
case "$MIRROR_TYPE" in
|
if [ -n "$PRIVATE_REGISTRY" ]; then
|
||||||
"private_primary")
|
echo -e "${GREEN}✓${NC} 私有仓库地址: ${PRIVATE_REGISTRY}"
|
||||||
echo -e "${GREEN}✓${NC} 主镜像源: ${PRIVATE_REGISTRY}"
|
echo -e "${GREEN}✓${NC} 私有仓库镜像: ${PRIVATE_MIRROR}"
|
||||||
echo -e "${GREEN}✓${NC} 备用镜像源: 阿里云、网易、中科大、腾讯云"
|
|
||||||
;;
|
if [ "$NEED_AUTH" = "yes" ]; then
|
||||||
"private_only")
|
echo -e "${GREEN}✓${NC} 私有仓库认证: 需要"
|
||||||
echo -e "${GREEN}✓${NC} 镜像源: ${PRIVATE_REGISTRY}"
|
echo -e "${GREEN}✓${NC} 用户名: ${PRIVATE_USERNAME}"
|
||||||
;;
|
if [ "$CREDENTIALS_SAVED" = "yes" ]; then
|
||||||
"public_only")
|
echo -e "${GREEN}✓${NC} 认证信息: 已保存"
|
||||||
echo -e "${GREEN}✓${NC} 镜像源: 阿里云、网易、中科大、腾讯云"
|
else
|
||||||
;;
|
echo -e "${YELLOW}⚠${NC} 认证信息: 未保存"
|
||||||
"official")
|
fi
|
||||||
echo -e "${GREEN}✓${NC} 镜像源: 官方Docker Hub"
|
|
||||||
;;
|
|
||||||
"custom")
|
|
||||||
echo -e "${GREEN}✓${NC} 自定义镜像源: ${#MIRRORS[@]}个"
|
|
||||||
for mirror in "${MIRRORS[@]}"; do
|
|
||||||
echo -e " - ${mirror}"
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [[ "$MIRROR_TYPE" == "private_primary" || "$MIRROR_TYPE" == "private_only" ]]; then
|
|
||||||
echo -e "${GREEN}✓${NC} 私有仓库用户名: ${username}"
|
|
||||||
if [[ $save_choice =~ ^[Yy]$ ]]; then
|
|
||||||
echo -e "${GREEN}✓${NC} 认证信息已保存"
|
|
||||||
else
|
else
|
||||||
echo -e "${YELLOW}⚠${NC} 认证信息未保存"
|
echo -e "${GREEN}✓${NC} 私有仓库认证: 无需认证"
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}✓${NC} 私有仓库: 未配置"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${GREEN}✓${NC} Docker服务已重启生效"
|
echo -e "${GREEN}✓${NC} Docker服务已重启生效"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
print_info "使用说明:"
|
print_info "使用说明:"
|
||||||
if [[ "$MIRROR_TYPE" == "private_primary" || "$MIRROR_TYPE" == "private_only" ]]; then
|
if [ -n "$PRIVATE_REGISTRY" ]; then
|
||||||
echo " 私有镜像: docker pull ${PRIVATE_REGISTRY}/镜像名称"
|
echo " 私有镜像: docker pull ${PRIVATE_REGISTRY}/镜像名称"
|
||||||
echo " 公共镜像: docker pull 镜像名称"
|
|
||||||
else
|
|
||||||
echo " 拉取镜像: docker pull 镜像名称"
|
|
||||||
fi
|
fi
|
||||||
|
echo " 公共镜像: docker pull 镜像名称"
|
||||||
echo " 查看配置: docker info | grep -A 10 'Registry Mirrors'"
|
echo " 查看配置: docker info | grep -A 10 'Registry Mirrors'"
|
||||||
|
echo " 测试拉取: docker pull hello-world"
|
||||||
|
|
||||||
|
echo
|
||||||
|
print_info "配置文件: /etc/docker/daemon.json"
|
||||||
|
print_info "备份文件: /etc/docker/daemon.json.backup.*"
|
||||||
|
if [ -n "$PRIVATE_REGISTRY" ] && [ "$NEED_AUTH" = "yes" ] && [ "$CREDENTIALS_SAVED" = "yes" ]; then
|
||||||
|
print_info "认证信息: ~/.docker/config.json"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 主函数
|
# 主函数
|
||||||
@@ -443,30 +561,37 @@ main() {
|
|||||||
clear
|
clear
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo " Docker镜像源配置脚本"
|
echo " Docker镜像源配置脚本"
|
||||||
echo " 主镜像源: ${PRIVATE_REGISTRY}"
|
|
||||||
echo "=========================================="
|
echo "=========================================="
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 检查Docker
|
# 检查Docker
|
||||||
check_docker
|
check_docker
|
||||||
|
|
||||||
|
# 获取私有仓库配置
|
||||||
|
get_private_registry_config
|
||||||
|
|
||||||
# 显示镜像源菜单
|
# 显示镜像源菜单
|
||||||
show_mirror_menu
|
show_mirror_menu
|
||||||
|
|
||||||
# 获取用户选择
|
# 获取用户选择
|
||||||
get_mirror_choice
|
get_mirror_choice
|
||||||
|
|
||||||
# 如果是自定义配置,获取详细选择
|
# 如果是混合配置,获取详细选择
|
||||||
if [ "$MIRROR_TYPE" = "custom" ]; then
|
if [ "$MIRROR_TYPE" = "mixed" ]; then
|
||||||
get_custom_config
|
get_mixed_config
|
||||||
|
elif [ "$MIRROR_TYPE" = "custom_public" ]; then
|
||||||
|
get_custom_public_config
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 如果是私有仓库配置,获取认证信息
|
# 如果是私有仓库需要认证,测试登录
|
||||||
if [[ "$MIRROR_TYPE" == "private_primary" || "$MIRROR_TYPE" == "private_only" ]]; then
|
if [ "$NEED_AUTH" = "yes" ]; then
|
||||||
get_private_credentials
|
|
||||||
if ! test_private_login; then
|
if ! test_private_login; then
|
||||||
print_error "配置中止,请解决登录问题后重新运行脚本"
|
print_error "私有仓库登录测试失败"
|
||||||
exit 1
|
read -p "是否继续配置?(可能会影响私有镜像拉取)(y/N): " continue_anyway
|
||||||
|
if [[ ! $continue_anyway =~ ^[Yy]$ ]]; then
|
||||||
|
print_error "配置中止,请解决登录问题后重新运行脚本"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -477,7 +602,7 @@ main() {
|
|||||||
restart_docker
|
restart_docker
|
||||||
|
|
||||||
# 保存私有仓库认证信息
|
# 保存私有仓库认证信息
|
||||||
if [[ "$MIRROR_TYPE" == "private_primary" || "$MIRROR_TYPE" == "private_only" ]]; then
|
if [ "$NEED_AUTH" = "yes" ]; then
|
||||||
save_private_credentials
|
save_private_credentials
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user