当前位置:首页 > 编程开发 > 正文

用 Docker Compose 搭一套本地 AI 栈:Ollama + Open WebUI + pgvector

约 5306 字 · 预计阅读 14 分钟
一句话总结:三个容器、一个 compose 文件,就能搭出「模型本地跑、界面像 ChatGPT、知识库有地方存」的环境。这篇给可直接粘贴的配置、拉模型和建知识库的顺序,以及五个必然踩到的坑。

先说这套东西解决什么。你可能有这几个需求:不想把公司文档传到别人服务器、想离线用、想随便换模型测效果、想给团队一个统一入口。

现有的选择要么太重(Kubernetes + vLLM + 向量库),要么太散(Ollama 命令行 + 自己写脚本)。Compose 这套刚好在中间:一条命令起来,一条命令停掉。

前置

  • Docker Desktop(Windows/macOS)或 docker + compose 插件(Linux)
  • 内存 8GB 起步,16GB 舒服(模型权重吃内存)
  • 有 NVIDIA 显卡的话装 Container Toolkit,能快好几倍
  • 磁盘留 30GB 以上(模型很占地方)

检查一下环境:

docker --veRSIon
docker compose version

三个服务,各管一件事

服务 镜像 端口 作用
ollamaollama/ollama11434模型运行时,提供 OpenAI 兼容接口
open-webuighcr.io/open-webui/open-webui:main8080聊天界面、知识库、多模型切换
dbpgvector/pgvector:pg175432存向量,给知识库做检索

docker-compose.yml:

services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped
    # 有 N 卡时取消下面注释
    # deploy:
    #   resources:
    #     reseRVAtions:
    #       devices:
    #         - driver: nvidia
    #           count: all
    #           capabilities: [gpu]

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "8080:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - DATABASE_URL=postgresql://ai:ai_pass@db:5432/ai
      - WEBUI_SECRET_KEY=换成你自己的随机串
    volumes:
      - webui_data:/app/backend/data
    depends_on:
      - ollama
      - db
    restart: unless-stopped

  db:
    image: pgvector/pgvector:pg17
    container_name: pgvector
    environment:
      - POSTGRES_USER=ai
      - POSTGRES_PASSWORD=ai_pass
      - POSTGRES_DB=ai
    volumes:
      - pg_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  ollama_data:
  webui_data:
  pg_data:

三个卷是重点。没有卷,docker compose down 一次模型和对话记录全没了,这是新手最常见的损失。

WEBUI_SECRET_KEY 记得换掉,它决定登录会话的加密。

起服务与拉模型

docker compose up -d
docker compose ps          # 三个都是 running 才对

拉模型走 Ollama 容器内部:

docker exec -it ollama ollama pull qwen3:4b
docker exec -it ollama ollama list

模型选多大要看机器。8GB 内存建议 4B 量化版(约 2.5GB),16GB 可以上 7B 到 9B(约 5GB)。别一上来拉 32B,加载会直接 OOM。

验证运行时通不通:

curl http://localhost:11434/API/tags
curl http://localhost:11434/api/generate -d '{"model":"qwen3:4b","prompt":"说一句话","stream":false}'

两条都返回 JSON 就说明模型层没问题。

建知识库前先开扩展

这一步最容易漏。pgvector 镜像只装了扩展文件,数据库里还得手动执行一次 CREATE EXTENSION,否则建向量表会报类型不存在。

docker exec -it pgvector psql -U ai -d ai -c "CREATE EXTENSION IF NOT EXISTS vector;"
docker exec -it pgvector psql -U ai -d ai -c "\dx"

看到 vector 出现在扩展列表里就对了。

之后打开 http://localhost:8080,注册第一个账号(第一个注册的账号自动成为管理员),进「工作空间 → 知识库 → 新建」,上传文档即可。

配置上的几个判断

为什么用 Open WebUI 而不是自己写前端? 因为它已经做了你要的大部分事:多模型切换、对话历史、文档上传、RAG 检索、用户管理。省下的时间够你把模型调好。

为什么接 pgvector 而不是用内置的向量存储? 如果只是自己用,内置的够。多人共用、文档量大、想自己查向量数据时,独立数据库更好管。

要不要加 vLLM? 单人用不必。vLLM 的优势是并发吞吐,本地这套的瓶颈是模型加载和内存,换 vLLM 收益有限,还多一层复杂度。

能对外提供服务吗? 别直接把 8080 暴露到公网。这套配置没有 TLS、没有限流、默认密码策略也弱。要给团队用,前面加一层反向代理和身份认证。

坑清单

坑一:忘了挂卷,重启后模型全丢。 重新拉一遍 5GB 权重,网速慢的话一晚上就过去了。配置里那三个 volumes 是保命的。

坑二:pgvector 没建扩展就上传文档。 表现是知识库一直转圈或者报 500,容器日志里有 type "vector" does not exist。

坑三:Windows 上 WSL2 内存吃满。 默认 WSL 最多用一半物理内存,模型加载时容易触发 OOM 杀进程。在 %UserProfile%\.wslconfig 里限制:

[wsl2]
memory=12GB
swap=4GB

坑四:GPU 没直通,速度差十倍。 有 N 卡但没装 Container Toolkit 时,Ollama 会静默用 CPU。判断方法:docker exec -it ollama ollama ps 看 PROCESSOR 列是 GPU 还是 100% CPU。

坑五:端口冲突。 11434、8080、5432 都是常用端口。本机已有 PostgreSQL 的话 5432 会起不来,改成 "5433:5432" 即可(容器内端口不变)。

图 1:WebUI 只做界面与编排,模型和向量各在自己的容器里

FAQ

必须用 Docker 吗?

不必须,但强烈建议。直接装在宿主机上会污染 Python 环境,换模型版本时容易互相打架。

数据真的不出本机吗?

用这套配置是的,所有请求都在本机容器网络内。前提是你没有在 WebUI 里额外配置外部 API。

能跑多大模型?

取决于内存和显存。参考值:8GB 内存到 4B(量化),16GB 到 9B,32GB 到 14B 到 32B 之间。显存够的话优先用 GPU。

和 LM Studio 比怎么样?

LM Studio 更简单(点几下就好),但只有单人单机。Compose 这套适合多人共用、需要知识库、需要长期运行的场景。

怎么备份?

三个卷对应三份数据。docker run --rm -v ollama_data:/data -v $(pwd):/backup alpine tar czf /backup/ollama.tgz -C /data . 这类命令可以打包,但更省事的做法是记住模型列表,需要时重拉。

结语

这套栈的价值不是「省钱」,是把试错成本降到几乎为零。想试新模型,拉下来切一下;想试新的 RAG 策略,重建知识库就行。

把基础设施做轻,才有精力做真正的活儿。

参考资料

目录导航
  • 前置
  • 三个服务,各管一件事
  • 起服务与拉模型
  • 建知识库前先开扩展
  • 配置上的几个判断
  • 坑清单
  • FAQ
  • 结语
    • 参考资料
  • 相关文章:

  • 桌面 AI 客户端横评:Cherry Studio、Chatbox、LobeChat、Open WebUI 怎么选2026-10-28 08:38:22
  • Nanbeige4.3-33B 深度解读:33B 稠密模型敢对标 Qwen3.8-27B,跑分该怎么读2026-10-28 08:38:22
  • MiniCPM5-2B 本地部署实战:4GB 显存跑起来,附三种跑法与坑清单2026-10-28 08:38:22
  • 本地跑大模型工具横评:Ollama、LM Studio、vLLM 到底该选谁2026-10-28 08:38:22
  • 本地跑模型做应用:Ollama 与 vLLM 部署实战,6GB 显卡能干什么、什么时候必须换引擎2026-10-28 08:38:22
  • 发表评论

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。