# ─── 构建阶段:使用 uv 安装依赖 ─── FROM python:3.11-slim AS builder # 安装 uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv WORKDIR /app # 先复制依赖清单,利用 Docker 缓存 COPY pyproject.toml uv.lock .python-version ./ # 安装依赖到 .venv(离线锁定) RUN uv sync --frozen --no-install-project # ─── 运行阶段 ─── FROM python:3.11-slim WORKDIR /app # 从构建阶段复制虚拟环境 COPY --from=builder /app/.venv /app/.venv # 复制项目文件 COPY . . COPY data/config.json /app/config.json # 设置环境变量 ENV PATH="/app/.venv/bin:$PATH" \ PYTHONUNBUFFERED=1 # 创建数据目录(持久化挂载点) RUN mkdir -p /app/codex_tokens /app/logs EXPOSE 8080 CMD ["python", "-m", "uvicorn", "web_app:app", "--host", "0.0.0.0", "--port", "8080"]