ollama Provide a single command for "serve + pull model", to be used in CI/CD

t1qtbnec  于 2个月前  发布在  其他
关注(0)|答案(4)|浏览(22)

我正在基于官方的 ollama/ollama 镜像构建一个容器镜像,并希望在这个镜像中存储我打算提供的模型,这样在启动后就不需要拉取它。使用场景是在自动扩展的容器环境中运行 Ollama。
问题是,今天,在使用 ollama pull 命令之前,Ollama 需要 ollama serve

预期

我希望能使用一个非常简单的 Dockerfile,如下所示:

FROM ollama/ollama
RUN ollama pull gemma:2b
CMD ["serve"]

观察到

我不能使用一个简单的 Dockerfile,我需要使用一个 bash 脚本来启动服务器,等待其启动,然后在启动后拉取模型:

wait_for_ollama() {
  while ! nc -z localhost 8080; do 
    sleep 1  # Wait 1 second before checking again
  done
}

# Start ollama serve in the background
ollama serve & 

# Wait for ollama serve to start listening
wait_for_ollama
echo "ollama serve is now listening on port 8080"

# Run ollama pull
ollama pull gemma:2b

# Indicate successful completion
echo "ollama pull gemma:2b completed"

然后我在 Dockerfile 中引用它:

FROM ollama/ollama
ADD pull.sh /
RUN ./pull.sh
CMD ["serve"]
lpwwtiir

lpwwtiir2#

我的意思是,这可能是一个愚蠢的问题:但是你有没有尝试过从Docker外部下载它,然后在Docker构建过程中将其复制进去?你也可以使用一个中间构建容器来完成这个操作,使用bash脚本获取模型,然后将其复制到最终结果中。

nszi6y05

nszi6y053#

你可以通过环境变量控制 ollama 存储模型的位置,在容器构建时下载并导入模型,然后递归地将整个目录复制到最终镜像中。接下来,只需确保最终镜像中的 ollama 从正确的目录加载模型即可。

uqdfh47h

uqdfh47h4#

我的意思是,这可能是一个愚蠢的问题:但是你有没有尝试过从外部下载它并在docker构建过程中复制到docker中?你也可以使用中间构建容器来完成这个操作,使用bash脚本获取模型,然后将其复制到最终结果中。

在docker构建期间拉取可以使容器启动得更快,因为服务器每次启动时都不需要拉取模型。这对于快速扩展生产服务至关重要。

相关问题