From 0724fd3721d6629eec7abf146110e4b7062dc02d Mon Sep 17 00:00:00 2001 From: shy3130 <415333856@qq.com> Date: Fri, 26 Jun 2026 17:39:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20PyPI=20=E6=BA=90=E5=A4=9A?= =?UTF-8?q?=E7=BA=A7=E5=85=9C=E5=BA=95,=E9=81=BF=E5=85=8D=E5=8D=95?= =?UTF-8?q?=E6=BA=90=E5=90=8C=E6=AD=A5=E5=BB=B6=E8=BF=9F=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复国内镜像(清华源)同步 uv 包延迟时,USE_CN_MIRROR=1 构建报 "Could not find a version that satisfies the requirement uv" 的问题, 用户此前需手动传 --build-arg PYPI_INDEX 换源才能通过。 - pip install uv 加三重 fallback:主源(清华) → 备用源(阿里云) → 官方源 - uv sync 同时挂双 index(UV_DEFAULT_INDEX + UV_EXTRA_INDEX_URL), uv 自动在两源查找,任一源缺包时另一源补位 - 新增 PYPI_FALLBACK build arg(默认阿里云),可自定义 正常构建零影响(fallback 首环即成功,--frozen 严格按 lock 安装), 仅在主源故障/同步延迟时自动兜底。 --- Dockerfile | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3ec05f1..36ec384 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,8 @@ ARG USE_CN_MIRROR=1 ARG NPM_REGISTRY=https://registry.npmmirror.com ARG PYPI_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple +# 备用 PyPI 源:主源同步延迟/故障时自动兜底(阿里云与清华互为补充) +ARG PYPI_FALLBACK=https://mirrors.aliyun.com/pypi/simple ARG BACKEND_EXTRAS= # === Stage 1: 前端构建 === @@ -26,12 +28,18 @@ RUN pnpm build FROM python:3.11-slim AS runtime ARG USE_CN_MIRROR=1 ARG PYPI_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple +ARG PYPI_FALLBACK=https://mirrors.aliyun.com/pypi/simple ARG BACKEND_EXTRAS= WORKDIR /app -# 安装 uv(快) +# 安装 uv(快) —— 国内镜像下三重兜底:主源 → 备用源 → 官方源, +# 任一成功即可,避免单一镜像同步延迟/故障导致构建失败。 +# uv 发版极频繁,国内镜像同步存在时间窗口,不锁版本且无 fallback 时 +# 容易遇到 "from versions: none"(索引解析不到最新版)。 RUN if [ "$USE_CN_MIRROR" = "1" ]; then \ - pip install --no-cache-dir uv -i "$PYPI_INDEX"; \ + pip install --no-cache-dir uv -i "$PYPI_INDEX" || \ + pip install --no-cache-dir uv -i "$PYPI_FALLBACK" || \ + pip install --no-cache-dir uv; \ else \ pip install --no-cache-dir uv; \ fi @@ -39,7 +47,11 @@ RUN if [ "$USE_CN_MIRROR" = "1" ]; then \ # Backend deps COPY README.md /README.md COPY backend/pyproject.toml backend/uv.lock* ./ -RUN if [ "$USE_CN_MIRROR" = "1" ]; then export UV_DEFAULT_INDEX="$PYPI_INDEX"; fi; \ +# uv 原生支持同时挂多个 index(主源 + 备用源),会自动在两源中查找, +# 比逐个重试更稳健 —— 任一源缺包时另一源补位。 +RUN if [ "$USE_CN_MIRROR" = "1" ]; then \ + export UV_DEFAULT_INDEX="$PYPI_INDEX" UV_EXTRA_INDEX_URL="$PYPI_FALLBACK"; \ + fi; \ set -- --no-dev; \ for extra in $BACKEND_EXTRAS; do \ set -- "$@" --extra "$extra"; \