FROM python:3.9-slim WORKDIR /code # 安装系统依赖 RUN apt-get update && \ apt-get install -y --no-install-recommends curl && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # 复制必要的文件 COPY ./requirements.txt /code/requirements.txt # 安装依赖 RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir --upgrade -r /code/requirements.txt && \ pip install gunicorn # 复制应用文件 COPY ./flask_app.py /code/flask_app.py COPY ./service.py /code/service.py COPY ./templates /code/templates/ COPY ./static /code/static/ # 创建必要的目录 RUN mkdir -p /code/static/uploads # 创建启动脚本 RUN echo '#!/bin/bash\n\ # 优先使用Docker Secret\n\ if [ -f /run/secrets/MISTRAL_API_KEY ]; then\n\ export MISTRAL_API_KEY=$(cat /run/secrets/MISTRAL_API_KEY)\n\ # 其次使用Hugging Face Repository Secret\n\ elif [ -n "$HF_SECRET_MISTRAL_API_KEY" ]; then\n\ export MISTRAL_API_KEY=$HF_SECRET_MISTRAL_API_KEY\n\ # 最后尝试读取.env文件\n\ elif [ -f /code/.env ]; then\n\ export $(grep -v "^#" /code/.env | xargs)\n\ fi\n\ # 启动应用\n\ exec "$@"' > /code/entrypoint.sh && \ chmod +x /code/entrypoint.sh # 设置端口 ENV PORT=7860 # 设置健康检查 HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ CMD curl -f http://localhost:${PORT}/ || exit 1 # 暴露端口 EXPOSE ${PORT} # 使用启动脚本 ENTRYPOINT ["/code/entrypoint.sh"] # 启动应用 CMD ["gunicorn", "--workers=2", "--bind=0.0.0.0:7860", "flask_app:app"]