oo / Dockerfile
jljiu's picture
Update Dockerfile
30ff34b verified
# 基础镜像使用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"]