37 lines
1.4 KiB
Docker
37 lines
1.4 KiB
Docker
# ============================================================
|
||||
|
|
# 学生管理系统 - FastAPI 后端镜像
|
|||
|
|
# 构建: docker build -t student-system-backend .
|
|||
|
|
# 说明: 应用入口 main:app,监听 9090,数据库通过环境变量注入
|
|||
|
|
# ============================================================
|
|||
|
|
FROM python:3.11-slim
|
|||
|
|
|
|||
|
|
# pip 源,可在构建时通过 --build-arg PIP_INDEX_URL=xxx 覆盖(默认清华镜像)
|
|||
|
|
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
|||
|
|
ENV PIP_INDEX_URL=${PIP_INDEX_URL} \
|
|||
|
|
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|||
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|||
|
|
PYTHONUNBUFFERED=1 \
|
|||
|
|
TZ=Asia/Shanghai
|
|||
|
|
|
|||
|
|
WORKDIR /app
|
|||
|
|
|
|||
|
|
# 先装依赖,利用 Docker 层缓存:只有 requirements.txt 变化时才重新安装
|
|||
|
|
COPY requirements.txt .
|
|||
|
|
# tzdata 用于 Python zoneinfo 解析 Asia/Shanghai(slim 镜像默认不含时区库)
|
|||
|
|
RUN pip install --no-cache-dir -r requirements.txt tzdata
|
|||
|
|
|
|||
|
|
# 拷贝业务代码
|
|||
|
|
COPY . .
|
|||
|
|
|
|||
|
|
# 文件上传目录(相对工作目录 files/),并确保存在
|
|||
|
|
RUN mkdir -p /app/files
|
|||
|
|
|
|||
|
|
EXPOSE 9090
|
|||
|
|
|
|||
|
|
# 健康检查:访问根路径 / ,返回 200 即视为健康
|
|||
|
|
HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
|
|||
|
|
CMD python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:9090/').status==200 else 1)"
|
|||
|
|
|
|||
|
|
# 生产启动:不加 --reload,多进程可选 --workers 2
|
|||
|
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "9090"]
|