# ============================================================================= # 企微IT智能服务台 — 后端 Docker 镜像构建文件 # ============================================================================= # 说明:基于 Python 3.12 构建后端镜像 # 用法:docker build -t wecom-it-desk-backend . # ============================================================================= # -------------------------------------------------------------------------- # 第一阶段:构建阶段 # -------------------------------------------------------------------------- FROM python:3.12-slim AS builder # 设置工作目录 WORKDIR /app # 安装系统依赖(psycopg2 编译需要 + qrcode 图片处理需要 + healthcheck 需要 curl) RUN apt-get update && \ apt-get install -y --no-install-recommends gcc libpq-dev libjpeg-dev zlib1g-dev curl && \ rm -rf /var/lib/apt/lists/* # 复制依赖声明文件并安装(利用 Docker 层缓存,依赖不变则不重新安装) # 使用清华大学 PyPI 镜像源,解决公司内网下载 PyPI 官方源超时问题 COPY requirements.txt . RUN pip install --no-cache-dir \ --timeout 120 \ --retries 5 \ -i https://pypi.tuna.tsinghua.edu.cn/simple/ \ --trusted-host pypi.tuna.tsinghua.edu.cn \ -r requirements.txt # -------------------------------------------------------------------------- # 第二阶段:运行阶段(更小的镜像体积) # -------------------------------------------------------------------------- FROM python:3.12-slim # 设置标签信息 LABEL maintainer="IT服务台开发团队" LABEL description="企微IT智能服务台后端服务" # 安装运行时依赖(psycopg2 运行时需要 libpq + healthcheck 需要 curl) RUN apt-get update && \ apt-get install -y --no-install-recommends libpq5 curl && \ rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /app # 🔧 v0.7.0-alpha 修复:显式设置 PYTHONPATH # 原因:alembic 1.13+ 不默认 prepend cwd,导致 `from app.config import settings` 失败 # 关联:memory/docker-dev-alembic-pythonpath.md(同样问题 dev 环境也中招) ENV PYTHONPATH=/app # 从构建阶段复制已安装的 Python 包 COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages COPY --from=builder /usr/local/bin /usr/local/bin # 复制项目代码(排除 .env 和 .env.*,避免覆盖 docker-compose 注入的环境变量) COPY . . # 删除可能被 COPY 进镜像的开发 .env # 原因:pydantic-settings 会优先读 /app/.env,会覆盖 compose 的 environment 块 # 关联:memory/v070-alpha-backend-env-override-bug.md RUN rm -f /app/.env /app/.env.* || true # 暴露端口 EXPOSE 8000 # 启动命令(Docker Compose 中会覆盖为 alembic upgrade head + uvicorn) CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]