增加多Docker APT仓库支持,优先使用国内源

This commit is contained in:
jingrow 2025-08-11 17:32:20 +08:00
parent 2927eb835b
commit db030150c4

View File

@ -1119,23 +1119,57 @@ install_docker() {
apt-get update
# 安装必要的包(避免交互式配置)
apt-get install -y --force-yes apt-transport-https ca-certificates curl gnupg lsb-release
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥非交互式
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --batch --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 选择可用的 Docker APT 仓库与 GPG 地址(带回退)
local arch=$(dpkg --print-architecture)
local codename=$(lsb_release -cs)
local mirror_candidates=(
"https://mirrors.aliyun.com/docker-ce"
"https://mirrors.ccs.tencentyun.com/docker-ce"
"https://mirrors.ustc.edu.cn/docker-ce"
"https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
"https://download.docker.com"
)
local chosen_base=""
local chosen_gpg=""
# 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
for base in "${mirror_candidates[@]}"; do
log_info "尝试Docker镜像: ${base}"
if curl -fsSL --connect-timeout 5 "${base}/linux/ubuntu/gpg" >/dev/null 2>&1; then
chosen_base="$base"
chosen_gpg="${base}/linux/ubuntu/gpg"
log_success "选择Docker镜像: ${base}"
break
else
log_warning "镜像不可达,继续回退: ${base}"
fi
done
if [ -z "$chosen_base" ]; then
log_error "无法访问任一 Docker APT 镜像请检查网络尤其是443端口或稍后重试"
return 1
fi
# 添加Docker GPG密钥
curl -fsSL "$chosen_gpg" | gpg --batch --yes --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg || {
log_error "下载或导入Docker GPG密钥失败: $chosen_gpg"
return 1
}
# 写入APT源
echo "deb [arch=${arch} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] ${chosen_base}/linux/ubuntu ${codename} stable" \
> /etc/apt/sources.list.d/docker.list
# 更新包索引
apt-get update
# 安装Docker Engine避免交互式配置
apt-get install -y --force-yes docker-ce docker-ce-cli containerd.io docker-compose-plugin
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动Docker服务
systemctl start docker
systemctl enable docker
systemctl start docker || true
systemctl enable docker || true
log_success "Docker安装完成"
fi
@ -1160,19 +1194,19 @@ EOF
# 重新加载systemd配置并重启Docker服务
log_info "重新加载systemd配置并重启Docker服务..."
systemctl daemon-reload
systemctl restart docker
systemctl daemon-reload || true
systemctl restart docker || true
# 验证配置是否生效
log_info "验证Docker镜像仓库配置..."
if docker info | grep -q "k487mmwn.mirror.aliyuncs.com"; then
if docker info 2>/dev/null | grep -q "k487mmwn.mirror.aliyuncs.com"; then
log_success "Docker镜像仓库配置成功"
else
log_warning "Docker镜像仓库配置可能未生效请手动检查"
fi
# 将jingrow用户添加到docker组
usermod -aG docker jingrow
usermod -aG docker jingrow || true
log_success "将jingrow用户添加到docker组"
}
@ -1193,7 +1227,7 @@ install_jq() {
apt-get update
# 安装jq工具
apt-get install -y --force-yes jq
apt-get install -y jq
if command -v jq &> /dev/null; then
log_success "jq工具安装完成"