# 1. 使用官方 uv 镜像 FROM ghcr.io/astral-sh/uv:latest AS uv_setup # 2. 运行环境 FROM python:3.12-slim WORKDIR /app # 复制 uv 命令 COPY --from=uv_setup /uv /uvx /bin/ # 安装系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ libpq-dev \ build-essential \ && rm -rf /var/lib/apt/lists/* # 复制依赖描述文件 COPY pyproject.toml uv.lock ./ # 【核心修复】使用 uv sync # --frozen: 强制要求 uv.lock 必须是最新的 # --no-dev: 不安装开发依赖(如 pytest 等),减小体积 # --no-install-project: 先不安装当前项目代码,只装依赖(优化缓存) RUN uv sync --frozen --no-dev --no-install-project # 复制项目代码 COPY . . # 【关键点】将虚拟环境的 bin 目录加入系统路径 # 这样你运行 python 或 uvicorn 时,系统会自动使用 uv 准备好的那个环境 ENV PATH="/app/.venv/bin:$PATH" ENV PYTHONPATH=/app # 暴露端口 EXPOSE 28000 # 启动命令 # 现在直接调用 uvicorn 即可,它会自动找到 .venv 里的版本 CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]