我正在基于官方的 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"]
4条答案
按热度按时间h5qlskok1#
CC @wietsevenema
lpwwtiir2#
我的意思是,这可能是一个愚蠢的问题:但是你有没有尝试过从Docker外部下载它,然后在Docker构建过程中将其复制进去?你也可以使用一个中间构建容器来完成这个操作,使用bash脚本获取模型,然后将其复制到最终结果中。
nszi6y053#
你可以通过环境变量控制 ollama 存储模型的位置,在容器构建时下载并导入模型,然后递归地将整个目录复制到最终镜像中。接下来,只需确保最终镜像中的 ollama 从正确的目录加载模型即可。
uqdfh47h4#
我的意思是,这可能是一个愚蠢的问题:但是你有没有尝试过从外部下载它并在docker构建过程中复制到docker中?你也可以使用中间构建容器来完成这个操作,使用bash脚本获取模型,然后将其复制到最终结果中。
在docker构建期间拉取可以使容器启动得更快,因为服务器每次启动时都不需要拉取模型。这对于快速扩展生产服务至关重要。