# 基础镜像使用Python 3.9 FROM python:3.9 # 设置工作目录 WORKDIR /app # 安装系统依赖 RUN apt-get update && apt-get install -y curl sudo fontconfig wget # 设置所有环境变量到 /tmp 目录下 ENV OLLAMA_HOME=/.ollama ENV GRADIO_TEMP_DIR=/tmp/gradio ENV MPLCONFIGDIR=/tmp/matplotlib ENV FONTCONFIG_PATH=/tmp/fontconfig ENV XDG_CACHE_HOME=/tmp/cache # 创建必要的目录并设置权限 RUN mkdir -p ${OLLAMA_HOME} \ && mkdir -p ${GRADIO_TEMP_DIR} \ && mkdir -p ${MPLCONFIGDIR} \ && mkdir -p ${FONTCONFIG_PATH} \ && mkdir -p ${XDG_CACHE_HOME} \ && chmod -R 777 /tmp \ && chmod -R 777 ${OLLAMA_HOME} # 确保/app目录可写 RUN chmod -R 777 /app # 安装Ollama RUN curl -L https://ollama.ai/install.sh | sh # 安装Gradio及其依赖 RUN pip install gradio requests # 下载模型文件(使用wget并添加重试机制) RUN wget --tries=3 --retry-connrefused --waitretry=5 --timeout=30 \ -O /app/model.gguf \ https://huggingface.co/shenzhi-wang/Llama3.1-8B-Chinese-Chat/resolve/main/gguf/llama3.1_8b_chinese_chat_q4_k_m.gguf?download=true # 验证文件是否为GGUF格式 COPY <<-'EOF' /app/verify_gguf.py import sys def is_gguf(file_path): with open(file_path, "rb") as f: magic = f.read(4) return magic == b"GGUF" if not is_gguf("/app/model.gguf"): print("Error: Downloaded file is not in GGUF format") sys.exit(1) EOF RUN python3 /app/verify_gguf.py # 将当前目录下的所有文件复制到容器内的/app目录 COPY . /app # 创建新的Modelfile RUN echo "FROM /app/model.gguf\n\ PARAMETER stop \"Human:\"\n\ PARAMETER stop \"Assistant:\"\n\ PARAMETER temperature 0.7\n\ PARAMETER top_k 40\n\ PARAMETER top_p 0.9" > /app/Modelfile # 添加启动脚本并设置执行权限 COPY start.sh /app/start.sh RUN chmod +x /app/start.sh # 使用启动脚本 CMD ["/app/start.sh"]