用Docker本地运行Ollama完整指南
想在本地跑大模型,最省事的组合是 Docker 加 Ollama:一条命令起服务,模型和数据都落在卷里,换机器时把整个卷搬过去就能复用。这篇按「能跑通 → 跑得快 → 接进应用」的顺序走一遍,命令都可以直接复制。
💡 你将学到
想在本地跑大模型,最省事的组合是 Docker 加 Ollama:一条命令起服务,模型和数据都落在卷里,换机器时把整个卷搬过去就能复用。这篇按「能跑通 → 跑得快 → 接进应用」的顺序走一遍,命令都可以直接复制。
用Docker本地运行Ollama完整指南
想在本地跑大模型,最省事的组合是 Docker 加 Ollama:一条命令起服务,模型和数据都落在卷里,换机器时把整个卷搬过去就能复用。这篇按「能跑通 → 跑得快 → 接进应用」的顺序走一遍,命令都可以直接复制。
一、为什么用 Docker 跑 Ollama
- 环境隔离:除了显卡驱动和容器运行时,宿主机不用装额外依赖,删容器不留残留
- 版本可控:运行时跟着镜像走,升级和回滚只是换标签
- 数据可迁移:模型文件都在挂载卷里,备份卷等于备份全部模型
代价是性能损耗。Linux 上通常是个位数百分比,社区实测在 1%~2% 区间;Mac 的情况不同,见第五节。
二、前置条件
| 项目 | 要求 |
|---|---|
| 容器运行时 | Docker Engine 或 Docker Desktop |
| NVIDIA 显卡 | 已装驱动,Linux 上还需 NVIDIA Container Toolkit |
| 磁盘 | 7B 模型约 4–5GB,14B 约 9GB |
| 端口 | 11434 未被占用 |
三、三步跑起来
第一步,拉镜像并启动:
docker run -d --name ollama -p 11434:11434 \
-v ollama_data:/root/.ollama --restart unless-stopped ollama/ollama
第二步,拉模型。进容器执行,避免再装一个宿主机客户端:
docker exec -it ollama ollama pull llama3.1:8b
第三步,验证接口:
curl http://localhost:11434/api/generate -d '{"model":"llama3.1:8b","prompt":"你好"}'
返回 JSON 就说明服务通了。Ollama 同时提供 OpenAI 兼容端点,/v1/chat/completions 能被现有 SDK 直接调用。
四、用上 GPU
NVIDIA 显卡加 --gpus all:
docker run -d --name ollama --gpus all -p 11434:11434 \
-v ollama_data:/root/.ollama --restart unless-stopped ollama/ollama
docker exec -it ollama nvidia-smi # 能看到显卡即生效
容器里看不到显卡,九成是宿主机缺 NVIDIA Container Toolkit,重装一遍并重启 Docker 就好。AMD 显卡要走 ROCm 专用镜像,标签以官方文档为准。
五、Mac 上要注意
Docker Desktop for Mac 不支持 GPU 直通,容器里的 Ollama 只能用 CPU,比原生安装慢很多。Mac 用户建议装原生版,端口同样是 11434,调用代码一行都不用改。
六、常用命令与参数
| 操作 | 命令或参数 |
|---|---|
| 看日志 | docker logs -f ollama |
| 列出模型 | docker exec -it ollama ollama list |
| 换模型目录 | 加 -e OLLAMA_MODELS=/models,卷挂到 /models |
| 只监听本机 | 加 -e OLLAMA_HOST=127.0.0.1:11434 |
| 限制并发 | 加 -e OLLAMA_NUM_PARALLEL=2、-e OLLAMA_MAX_LOADED_MODELS=1 |
模型默认落在容器内 /root/.ollama/models,宿主机实际路径用 docker volume inspect ollama_data 查,备份时整个目录打包即可。
七、升级与接入界面
把命令改写成 compose.yaml 更好维护:容器参数写进 services.ollama,需要 GPU 就加 deploy.resources.reservations.devices 段,之后 docker compose up -d 起服务,docker compose pull && docker compose up -d 升级,参数与命令行一一对应。
要一个聊天界面,最常见的搭配是 Open WebUI:
docker run -d --name open-webui -p 3000:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-v open-webui:/app/backend/data \
--add-host=host.docker.internal:host-gateway \
ghcr.io/open-webui/open-webui:main
打开 http://localhost:3000 就能对话。要用在自己的代码里,base_url 填 http://localhost:11434/v1,api_key 随便给一个非空字符串即可,本地服务不校验。
常见问题
Q:容器里下的模型,宿主机原生的 Ollama 能用吗?
可以。两边默认都读 ~/.ollama,把卷目录映射到宿主机同一路径就能共用,省一份空间。
Q:第一次调用为什么特别慢? 模型要加载进显存或内存,冷启动几秒到几十秒属正常,之后常驻就稳定了。
Q:把 11434 暴露到公网安全吗? 不安全。Ollama 默认没有鉴权,能连上端口就能随意调用。要么只监听 127.0.0.1,要么前面加一层带认证的反向代理。
注:镜像标签、GPU 支持范围和启动参数会随版本变化,具体以官方文档为准。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。
