目录
[✅ 方法一:在启动容器时直接加入 --restart=always](#✅ 方法一:在启动容器时直接加入 --restart=always)
[✅ 方法二:如果容器已创建,只需修改 restart policy](#✅ 方法二:如果容器已创建,只需修改 restart policy)
[🧪 验证是否自动启动](#🧪 验证是否自动启动)
[📌 注意事项](#📌 注意事项)
[1. 创建一个 entrypoint/warmup 脚本](#1. 创建一个 entrypoint/warmup 脚本)
[2. 修改 docker run,让容器使用此脚本作为 Entrypoint](#2. 修改 docker run,让容器使用此脚本作为 Entrypoint)
[🔥 结果效果](#🔥 结果效果)
前言
当使用Docker的方式部署了ollama容器之后,如果遇到主机重启,那么ollama容器并不会自动重启,其中已经下载好的模型也不会自动加载。针对这种情况,下面我将详述如何设置ollama容器的自动启动和自动加载所需要的模型。
一、容器自启动
要让 Ollama 容器在主机重启后自动启动,有两种常见方式:
✅ 方法一:在启动容器时直接加入 --restart=always
如果你是使用 docker run 启动容器,那么只需要添加:
bash
--restart=always
例如:
bash
sudo docker run -d \
--gpus=all \
--restart=always \
-v /ollama_weights:/root/.ollama \
-p 11434:11434 \
--network host
--name ollama \
ollama/ollama:latest
这样 Docker 会保证:
| 重启情况 | 容器是否自动启动 |
|---|---|
| 主机重启 | ✔ 自动启动 |
| Docker 服务重启 | ✔ 自动启动 |
| 容器退出(异常) | ✔ 自动重启 |
手动 docker stop |
✘ 不会重启(因为你是手动关的) |
✅ 方法二:如果容器已创建,只需修改 restart policy
如果 你已经创建了容器,可以直接修改它的 restart policy,而不需要重建容器:
bash
sudo docker update --restart=always ollama
查看是否设置成功:
bash
sudo docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' ollama
如果输出:
bash
always
说明设置成功。
🧪 验证是否自动启动
你可以亲自测试:
① 重启 Docker 服务
bash
sudo systemctl restart docker
然后查看容器是否自动启动:
bash
sudo docker ps | grep ollama
② 重启整台机器
bash
sudo reboot
系统启动后:
bash
sudo docker ps | grep ollama
如果仍然在运行,就说明自动启动成功。
📌 注意事项
✔ 如果你的容器是通过 docker-compose 启动
需要在 docker-compose.yml 中加入:
bash
restart: always
二、模型自加载
容器中启动的 Ollama 不会在重启时自动 pull/运行模型 。它只会在你调用时(如 ollama run xxx)动态加载。如果你希望容器重启后 模型自动就绪 ,需要:在容器启动后主动运行一次模型。
例如:
bash
ollama run qwen2.5:14b "hello"
这一步会 强制模型加载到本地并初始化,后续请求就不会卡在第一次编译/加载上。
方案:给容器增加自动加载脚本
1. 创建一个 entrypoint/warmup 脚本
在宿主机 (比如/dify_workspace/ollama_weights/目录下) 新建文件:
/dify_workspace/ollama_weights/init_models.sh
bash
#!/bin/sh
# 后台启动 ollama 服务
ollama serve &
# 等待服务就绪
sleep 5
# 自动预加载你需要的模型(不会输出内容)
ollama run qwen2.5:14b "warmup" >/dev/null 2>&1
ollama run shaw/dmeta-embedding-zh:latest "warmup" >/dev/null 2>&1
# 保持前台运行
wait
给权限:
bash
chmod +x /dify_workspace/ollama_weights/init_models.sh
2. 修改 docker run,让容器使用此脚本作为 Entrypoint
替代你现在的启动命令:
bash
docker run -d --gpus=all \
--restart=always \
-v /dify_workspace/ollama_weights:/root/.ollama \
-v /dify_workspace/ollama_weights/init_models.sh:/init_models.sh \
-p 11434:11434 \
--network host \
--name ollama \
--entrypoint /bin/sh \
ollama/ollama:latest /init_models.sh
注意使用:
bash
--entrypoint /bin/sh
来替换镜像默认入口点。
这样容器启动时将:
-
启动 ollama 服务
-
自动 warm-up(加载)模型
-
保持前台运行
🔥 结果效果
| 功能 | 实现 |
|---|---|
| 模型文件持久保存 | ✔ /root/.ollama 映射到宿主机 |
| 容器重启后自动加载模型 | ✔ ollama run xxx 自动 warm-up |
| 避免第一次调用卡顿 | ✔ 预热机制 |
| 自动运行 + 自动恢复 | ✔ 使用 entrypoint 或 compose |