FROM python:3.11-slim WORKDIR /app # 设置环境变量 ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 # 安装系统工具 (curl用于可能的健康检查) RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/* # 1. 缓存层:仅复制依赖定义并安装 # 创建伪造的 app 目录以满足 pip install . 的要求 COPY pyproject.toml . RUN mkdir app && touch app/__init__.py RUN pip install --no-cache-dir . # 2. 源码层:复制真实代码 COPY app ./app COPY alembic ./alembic COPY alembic.ini . # 再次安装本身(不带依赖),确保源码更新被标记为已安装 RUN pip install --no-cache-dir --no-deps . # 创建静态文件目录 RUN mkdir -p static/images # 暴露端口 EXPOSE 8000 # 默认启动命令(可被 docker-compose 覆盖) CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]