如果你在 VPS 上部署过 Ollama,大概率遇到过模型下载一半丢包、容器重启后模型没了、端口冲突连不上这些破事。别急着重装系统,这篇 Ollama Docker 部署教程专门解决三个痛点:模型目录挂载、端口映射、数据持久化。主机选技术博客整理了实战中能直接复用的配置,适合跑 AI Agent、对接 Claude Code 或 n8n 工作流的场景。

为什么 Ollama 要跑在 Docker 里
直接裸机装 Ollama 当然可以,但 Docker 部署的优势很明显:
•环境隔离:不会污染宿主机 Python 或 CUDA 版本
•快速切换版本:`docker pull ollama/ollama:0.1.46` 秒切旧版
•数据持久化:模型和配置映射到宿主机目录,容器删了也不丢
•端口可控:避免和系统服务冲突,方便 Nginx 反代
尤其当你同时跑多个 AI 服务(比如 Hermes Agent、MCP 服务器)时,Docker 能避免端口和依赖打架。
第一步:确认 Docker 环境
先检查 Docker 是否装好,以及有没有 GPU 支持(NVIDIA 用户)。
docker –version # 看版本,20.10+ 基本够用
nvidia-smi # 确认驱动和 CUDA
docker run –rm –gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi # 测试 GPU 容器
如果没有 GPU,Ollama 也能跑 CPU 模式,只是推理慢。别硬上,小模型(如 qwen2:0.5b)CPU 也能接受。
第二步:拉取 Ollama 镜像
官方镜像名 `ollama/ollama`,建议指定版本而非 latest,避免升级后 API 不兼容。
docker pull ollama/ollama:0.1.46 # 以当前稳定版为准,去官方仓库看最新 tag
第三步:配置模型目录挂载
Ollama 默认把模型存到容器内 `/root/.ollama`,容器一删数据就丢。必须挂载宿主机目录。
创建宿主机模型目录
mkdir -p /data/ollama/models # 路径随意,但要有足够磁盘空间
chmod -R 755 /data/ollama/models # 确保 ollama 用户可写
启动容器并挂载
docker run -d \
–name ollama \
–restart unless-stopped \
-v /data/ollama/models:/root/.ollama \
-p 11434:11434 \
ollama/ollama:0.1.46
• `-v /data/ollama/models:/root/.ollama`:宿主机目录映射到容器内模型目录
• `-p 11434:11434`:暴露 11434 端口,供其他服务(如 Open WebUI、n8n)调用
• `–restart unless-stopped`:容器退出后自动重启,除非你手动停
验证挂载
docker exec ollama ls /root/.ollama # 应该看到 models 目录
docker exec ollama ollama pull qwen2:0.5b
ls -lh /data/ollama/models/models/ # 宿主机上能看到模型文件
第四步:端口配置与反向代理
Ollama 默认监听 11434,但生产环境不建议裸奔公网。建议用 Nginx 反代加 Basic Auth 或 IP 白名单。
修改端口映射
如果你本机 11434 已被占用,换个端口:
docker stop ollama && docker rm ollama
docker run -d \
–name ollama \
-v /data/ollama/models:/root/.ollama \
-p 127.0.0.1:11435:11434 \ # 只监听本地,外部通过 Nginx 转发
ollama/ollama:0.1.46
Nginx 反代示例
nginx
server {
listen 80;
server_name ollama.example.com;
location / {
proxy_pass http://127.0.0.1:11435;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
auth_basic "Ollama API";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
安全提醒:Ollama API 没有内置鉴权,暴露公网等于把模型接口送给全世界扫。至少用 Nginx 加一层 Basic Auth,或者用 Cloudflare Tunnel。
第五步:数据持久化与备份
除了模型目录,有时候需要保留 Ollama 的配置文件(比如自定义 Modelfile)。挂载时已经覆盖了 `/root/.ollama`,配置文件也会存进去。
备份模型
tar -czf ollama_models_$(date +%Y%m%d).tar.gz /data/ollama/models/
恢复时解压到相同路径,重新挂载即可。
迁移到新服务器
1. 停掉旧容器
2. 打包 `/data/ollama/models` 目录
3. 新服务器上解压到相同路径
4. 启动容器时挂载相同目录
老鸟叮嘱(避坑模块)
1.磁盘空间预警:一个 7B 模型大约 4-6GB,70B 模型 40GB+。挂载目录所在分区务必留足空间,否则模型下载一半报 `no space left`。
2.权限问题:如果宿主机目录权限不对,Ollama 容器内无法写入模型。用 `chown 1000:1000` 或 `chmod 777` 临时解决,但更安全的是用 `–user` 参数指定容器内用户 UID。
3.不要用 root 跑容器:虽然方便,但安全风险大。建议创建普通用户运行 Docker。
4.版本锁定:Ollama 更新频繁,API 有时会小改。如果你对接了 n8n 或 MCP 服务器,固定版本避免意外断联。
5.日志排查:容器起不来,先看日志 `docker logs ollama`。常见错误:端口被占、挂载目录不存在、GPU 驱动没装。
FAQ
Q1:Ollama Docker 部署后,如何让其他容器(如 Open WebUI)访问?
使用 Docker 网络,创建自定义网络 `docker network create ai-net`,然后两个容器都加入该网络,通过容器名通信。例如 Open WebUI 配置 `OLLAMA_BASE_URL=http://ollama:11434`。
Q2:模型下载一半断了,能断点续传吗?
Ollama 拉模型时是分片下载,断网后重试会继续。但如果你删了容器再重建,未完成的文件会丢失,需要重新 pull。建议保持容器运行。
Q3:挂载目录后,为什么容器内 `ollama list` 看不到已下载的模型?
检查挂载路径是否正确。用 `docker inspect ollama` 看 `Mounts` 部分确认宿主机目录映射到了容器内 `/root/.ollama`。另外,模型文件在 `models/` 子目录下,如果直接挂载到 `/root/.ollama/models` 会导致路径嵌套错误。
Q4:没有 GPU,纯 CPU 能跑吗?
能,但推理速度慢。小模型(1B-3B)可用,7B 模型在 CPU 上生成一个 token 要好几秒。如果 VPS 内存不足 8GB,建议只跑 1B 模型。
Q5:如何升级 Ollama 版本?
停容器 `docker stop ollama && docker rm ollama`,拉新镜像 `docker pull ollama/ollama:新版本`,再用相同挂载和端口参数启动。模型目录不变,数据不会丢。
Q6:Ollama API 地址怎么给 n8n 用?
n8n 里用 HTTP Request 节点,URL 填 `http://你的VPS_IP:11434/api/generate`。注意 n8n 容器和 Ollama 容器要在同一个网络或通过宿主机 IP 通信。
总结
Ollama Docker 部署的核心就三件事:挂对模型目录、绑对端口、锁住版本。按照这篇教程配置后,模型数据持久化、端口可控,后续对接 AI Agent 或 n8n 自动化工作流会省很多事。遇到问题先看日志,别急着删容器重来。
—
**相关阅读:**
– [VPS部署AI工具100讲:AI Agent、Codex、Claude Code、Hermes Agent、Ollama与自动化工作流实战教程](https://www.zhujixuan.com/jishujiaocheng/9606.html)
– [n8n VPS 部署教程:搭建自己的自动化工作流平台](https://www.zhujixuan.com/jishujiaocheng/9892.html)
– [Codex、Claude Code、OpenClaw、Hermes Agent、Ollama、n8n 分别适合什么场景](https://www.zhujixuan.com/jishujiaocheng/9759.html)
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9851.html 商家投稿邮箱:zhujixuanblog@qq.com
