Files
2026-10-23 18:08:46 +08:00

37 lines
1.2 KiB
Docker

# 本地嵌入服务镜像。
#
# 模型不在构建期打包 —— 体积大(约 570MB)且会频繁升级,改为容器启动时按需下载,
# 已有则复用。这样换模型只需改 compose 里的参数后重启,不用重新 build。
FROM python:3.11-slim
# pip 源做成构建参数:国内机器可用清华源显著提速
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
ARG PIP_TRUSTED_HOST=pypi.tuna.tsinghua.edu.cn
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir \
-i "${PIP_INDEX_URL}" \
--trusted-host "${PIP_TRUSTED_HOST}" \
-r requirements.txt
COPY app.py download_model.py entrypoint.sh ./
RUN chmod +x entrypoint.sh
# 模型目录。挂卷到这里,重启容器时模型不会丢。
ENV MODEL_DIR=/models
RUN mkdir -p /models
EXPOSE 8000
# slim 镜像里没有 curl,直接用 python 做健康检查
HEALTHCHECK --interval=30s --timeout=5s --start-period=900s --retries=3 \
CMD python -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8000/health',timeout=4).status==200 else 1)"
CMD ["./entrypoint.sh"]