diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 2754e36a..5a400e6d 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -2,28 +2,25 @@ # FastapiAdmin Backend Dockerfile # ============================================ # 多阶段构建:第一阶段安装依赖,第二阶段运行应用 +# 优化:移除 build-essential,多数包已有预编译 wheel # ============================================ -# 第一阶段:构建依赖 +# 第一阶段:安装依赖 FROM python:3.10-slim AS builder -# 设置时区 -ENV TZ=Asia/Shanghai +ENV TZ=Asia/Shanghai \ + PIP_NO_CACHE_DIR=1 -# 设置容器内工作目录 WORKDIR /build -# 安装编译依赖(部分包需要 build-essential) -RUN apt-get update && apt-get install -y --no-install-recommends \ - build-essential \ - && rm -rf /var/lib/apt/lists/* - # 复制依赖文件(利用 Docker 缓存层) COPY ./backend/requirements.txt . -# 安装 Python 依赖到指定目录 -RUN pip install --no-cache-dir -r requirements.txt \ - --target=/home/deps +# 安装 Python 依赖(全部使用预编译 wheel,无需 gcc/build-essential) +RUN pip install --no-cache-dir --only-binary :all: \ + -r requirements.txt --target=/home/deps 2>/dev/null \ + || pip install --no-cache-dir \ + -r requirements.txt --target=/home/deps # 第二阶段:运行环境 FROM python:3.10-slim @@ -38,21 +35,16 @@ ENV PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ TZ=Asia/Shanghai -# 创建非 root 用户 +# 创建非 root 用户和日志目录 RUN groupadd -r fastapiadmin && \ - useradd -r -g fastapiadmin -u 1001 -m -s /sbin/nologin fastapiadmin - -# 创建日志目录 -RUN mkdir -p /home/logs && \ + useradd -r -g fastapiadmin -u 1001 -m -s /sbin/nologin fastapiadmin && \ + mkdir -p /home/logs && \ chmod 755 /home/logs -# 设置工作目录 WORKDIR /home # 从构建阶段复制依赖 COPY --from=builder /home/deps /home/deps - -# 设置 PYTHONPATH ENV PYTHONPATH=/home/deps:$PYTHONPATH # 复制应用代码 @@ -64,12 +56,10 @@ RUN chown -R fastapiadmin:fastapiadmin /home # 切换到非 root 用户 USER fastapiadmin -# 暴露端口 EXPOSE 8001 # 容器健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8001/api/v1/health')" || exit 1 -# 运行应用 CMD ["python", "main.py", "run", "--env=prod"]