Files
2026-09-21 17:34:06 +08:00

51 lines
1.9 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# Student System 后端 - 基于 FastAPI
# ============================================================
FROM python:3.10-slim AS base
# 防止 Python 生成 .pyc,启用 stdout/stderr 无缓冲(日志实时输出)
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
TZ=Asia/Shanghai
WORKDIR /app
# 安装系统依赖(仅放置基础必需项,pymysql/aiomysql 客户端库依赖最少)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
tzdata \
curl \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone \
&& rm -rf /var/lib/apt/lists/*
# 配置 pip 国内镜像源(加速国内构建)
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
# ---------- 依赖层(利用 Docker 缓存,仅当 requirements.txt 变化时重建) ----------
COPY requirements.txt .
# 兼容处理:若根目录 requirements.txt 不存在则回退到 fastapi-app/requirements_1.txt
RUN if [ ! -s requirements.txt ]; then \
echo "WARNING: requirements.txt 为空,回退使用 fastapi-app/requirements_1.txt"; \
cp fastapi-app/requirements_1.txt requirements.txt || true; \
fi
RUN pip install --no-cache-dir -r requirements.txt
# ---------- 代码层 ----------
COPY fastapi-app/ .
# 上传文件持久化目录(与 docker-compose.yml 中的 volume 对应)
VOLUME ["/app/files"]
EXPOSE 9090
# 健康检查:访问 /docs(FastAPI 默认 Swagger UI)验证容器健康
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD curl -fsS http://127.0.0.1:9090/docs || exit 1
# 启动 Uvicorn;如需多 worker 可改为 --workers 2(注意数据库连接数)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "9090"]