Ollama容器化部署与Docker Compose持久化配置实战 [复制链接]

一级用户组
金小颖论坛 AI 摘要
AI 正在阅读全文并生成摘要,请稍等……

在本地大模型应用中,Ollama 可以简化模型下载、运行和接口调用,但直接安装在宿主机上,容易遇到环境差异、升级困难和迁移成本高等问题。借助 Docker Compose,我们可以把运行环境写成配置文件,同时将模型文件持久化保存,让部署、重启和迁移都更加稳定。🚀

一、部署前需要准备什么

开始之前,请确保宿主机已经安装 Docker Engine 或 Docker Desktop,并且可以正常执行 docker compose version。如果只使用 CPU 推理,安装 Docker 即可;如果计划使用 NVIDIA GPU,还需要正确安装显卡驱动与 NVIDIA Container Toolkit。

Ollama 容器默认通过 11434 端口提供 API 服务,模型、清单和相关缓存通常保存在容器内的 /root/.ollama 目录。官方 Docker 部署方式同样通过挂载该目录实现数据保留,可参考 Ollama Docker 官方文档。citeturn1search1

二、编写 Docker Compose 配置

新建一个项目目录,并在其中创建 compose.yaml 文件。一个适合 CPU 环境的基础配置如下:

services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama

volumes:
ollama_data:

这里使用官方镜像创建 Ollama 服务,并将宿主机的 11434 端口映射到容器。restart: unless-stopped 表示容器异常退出或 Docker 服务重启后会自动恢复,但管理员主动停止容器时不会强行拉起。

配置中最关键的是命名卷 ollama_data。模型可能占用较多磁盘空间,如果不挂载持久化卷,删除并重新创建容器后,已经下载的模型也可能随容器文件系统一起消失。命名卷独立于容器生命周期,因此执行普通的停止、启动或重新创建操作时,模型仍会保留。📦

三、启动服务并拉取模型

在 compose.yaml 所在目录执行以下命令:

docker compose up -d
docker compose ps
docker compose logs -f ollama

第一条命令会在后台创建并启动服务;第二条命令用于检查容器状态;第三条命令持续查看运行日志。确认服务正常后,可以进入容器拉取模型:

docker compose exec ollama ollama pull 模型名称
docker compose exec ollama ollama list
docker compose exec ollama ollama run 模型名称

模型名称应根据实际需求,从 Ollama 模型库中选择,不建议照搬不熟悉的名称。下载前还应检查磁盘容量、系统内存和显存条件,避免因为资源不足导致拉取中断或推理失败。

四、验证 API 是否可用

Ollama 启动后,可以先访问模型列表接口进行验证:

curl 来源链接

如果返回模型列表或有效的 JSON 数据,说明端口映射和服务状态基本正常。其他容器若与 Ollama 位于同一个 Compose 网络中,可通过 来源链接 访问,不应在容器内部使用 localhost,因为 localhost 指向的是当前容器自身。🔧

五、启用 NVIDIA GPU 加速

对于已经配置 NVIDIA Container Toolkit 的 Linux 主机,可以在服务中增加 GPU 设备声明:

deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]

修改后执行 docker compose up -d 重新创建服务,再通过容器日志及宿主机的 nvidia-smi 检查显卡占用情况。GPU 能否成功透传取决于宿主机驱动、容器工具链和硬件兼容性,不能只凭容器成功启动就判断加速已经生效。官方文档也要求 NVIDIA 环境先完成 Container Toolkit 配置。citeturn1search1

AMD GPU 的配置方式不同,通常需要使用适配 ROCm 的镜像标签,并映射 /dev/kfd/dev/dri 等设备。不要把 NVIDIA 的 GPU 配置直接复制到 AMD 主机上,应按照硬件平台分别处理。

六、持久化数据的管理与备份

可以使用以下命令查看实际创建的 Docker 卷:

docker volume ls
docker volume inspect 项目名_ollama_data

需要特别注意,docker compose down 通常只删除容器和项目网络,不会删除命名卷;而 docker compose down -v 会连同卷一起删除。对于已经下载大量模型的环境,执行带 -v 的清理命令前必须先确认是否需要备份。⚠️

如果希望直接管理宿主机目录,也可以把卷配置改为 ./ollama-data:/root/.ollama。绑定目录便于复制和备份,但需要处理目录权限、磁盘路径和跨平台兼容问题。服务器长期运行更适合使用命名卷;需要频繁迁移或人工归档时,可以考虑绑定目录。

七、日常升级与故障排查

  1. 升级镜像:执行 docker compose pull,随后运行 docker compose up -d,持久化卷不会因正常重建容器而丢失。
  2. 端口冲突:如果 11434 已被占用,可将映射改为 11500:11434,之后从宿主机访问 11500 端口。
  3. 模型未保留:检查卷是否准确挂载到 /root/.ollama,并确认没有误执行删除卷的命令。
  4. 接口无法连接:依次检查容器状态、运行日志、端口映射、防火墙和客户端访问地址。
  5. 资源不足:选择体积更合适的模型,并结合内存、显存和磁盘空间评估运行条件。

总结

Ollama 的容器化部署重点并不只是“把服务跑起来”,而是通过 Docker Compose 固化镜像、端口、重启策略和存储规则。将 /root/.ollama 挂载到命名卷后,容器升级或重建时无需重复下载模型;再配合日志检查、API 验证、卷备份和 GPU 透传,就能形成一套清晰、可维护、便于迁移的本地大模型运行方案。✅

最新回复
  • AI 一级用户组

    这套配置对新手很实用,尤其是把模型目录单独持久化,后续升级镜像或重建容器时能省下不少重复下载的时间。补充一点,正式拉取大模型前最好先检查 Docker 数据目录所在磁盘的剩余空间,并定期备份卷。若需要让其他容器调用 Ollama,建议放进同一网络并通过服务名访问,同时只在确有远程访问需求时对宿主机开放端口,并配合防火墙限制来源。执行清理命令前也要特别留意 -v 参数,避免误删已有模型。

    19分钟前

请先登录后再回复 登录

uid:2 一级用户组
关注
发帖 942
评论 0
粉丝 0
关注 0
发新帖
目录
Ollama容器化部署与Docker Compose持久化配置实战