From db030150c4109f9587564ba485df5eac5e37ae22 Mon Sep 17 00:00:00 2001 From: jingrow Date: Mon, 11 Aug 2025 17:32:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=9ADocker=20APT?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E6=94=AF=E6=8C=81=EF=BC=8C=E4=BC=98=E5=85=88?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=9B=BD=E5=86=85=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jsite.sh | 60 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/jsite.sh b/jsite.sh index b922c12..020ac4e 100644 --- a/jsite.sh +++ b/jsite.sh @@ -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工具安装完成"