Ollama + Open WebUI:给本地大模型套上类 ChatGPT 的图形界面
本地跑大模型,Ollama 是最省心的命令行工具之一。但每次都要打开终端敲命令、看不到历史会话、没有图形界面,对非技术用户并不友好。Open WebUI 正好补上这一块——它是一个可自托管的 AI 平台,提供了类 ChatGPT 的对话界面,能直接对接 Ollama 服务,也能接入任何 OpenAI 兼容 API。
整篇文章的目标:在同一台机器上把 Ollama 和 Open WebUI 都跑起来(用 Docker Compose 一把搞定),并在 Web 界面上完成第一次对话、模型切换、文档问答等操作。
为什么是 Ollama + Open WebUI
- Ollama:负责拉模型、跑推理、暴露 API(默认
http://localhost:11434)。 - Open WebUI:负责 UI、对话历史、用户与权限、RAG、模型管理、工具调用等”上层”能力。
两者职责清晰:一个管模型运行,一个管交互体验。Open WebUI 自身支持直接接 Ollama 服务(通过环境变量 OLLAMA_BASE_URL),这正是仓库官方 docker-compose.yaml 的默认组合。
环境准备
开始之前,确认以下条件:
- 操作系统:Linux / macOS / Windows 都可以,本文以 Linux 为例。
- Docker 与 Docker Compose:Open WebUI 和 Ollama 都用容器跑,宿主机必须装好 Docker Engine 和
docker compose插件(v2 格式)。如果还没装,请先到 Docker 官方文档安装。 - 硬件:CPU 至少 8GB 内存,跑 7B 量级模型建议 16GB+;有 NVIDIA GPU 会显著加速。Open WebUI 本身不重,主要占用来自 Ollama 加载的模型。
- 磁盘:预留 20GB+ 空间给模型缓存(7B 模型约 4–5GB,13B 约 7–8GB,具体大小以官方 tag 为准)。
> 提示:如果你已经在宿主机原生装过 Ollama 并且能 ollama run 对话,也可以选择不重启它,让 Open WebUI 通过 host.docker.internal 指向宿主。但本文的 Compose 文件会用容器版 Ollama,避免端口和路径冲突,更适合首次搭建。

第一步:用 Docker Compose 部署 Ollama + Open WebUI
这是核心步骤。仓库根目录的 docker-compose.yaml 把 Ollama 和 Open WebUI 写在一起,启动一条命令就能把两个服务都拉起来。
新建一个工作目录并进入:
mkdir -p ~/ai-stack && cd ~/ai-stack
在该目录下创建 docker-compose.yaml,内容如下(与官方仓库 docker-compose.yaml 一致):
services:
ollama:
volumes:
- ollama:/root/.ollama
container_name: ollama
pull_policy: always
tty: true
restart: unless-stopped
image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}
open-webui:
build:
context: .
dockerfile: Dockerfile
image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}
container_name: open-webui
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
ports:
- ${OPEN_WEBUI_PORT-3000}:8080
environment:
- 'OLLAMA_BASE_URL=http://ollama:11434'
- 'WEBUI_SECRET_KEY='
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
volumes:
ollama: {}
open-webui: {}
逐项解释关键配置:
- 两个 services:
ollama和open-webui,通过 Compose 的内部网络互通。 - ollama 镜像:
ollama/ollama,tag 用环境变量OLLAMA_DOCKER_TAG控制,默认latest,想固定版本可自行 export。 - open-webui 镜像:默认从 GitHub Container Registry 拉
${WEBUI_DOCKER_TAG-main}(main 分支构建);如要本地构建可保留build段,让 Docker 在第一次启动时本地打镜像。 - 端口映射:宿主
${OPEN_WEBUI_PORT-3000}映射到容器8080。默认在浏览器访问http://:3000。要改端口就 exportOPEN_WEBUI_PORT=8080之类。 - 环境变量:
OLLAMA_BASE_URL=http://ollama:11434:让 Open WebUI 直接走 Compose 内部网络连 Ollama,不要改成localhost,否则容器里访问不到。WEBUI_SECRET_KEY=:用于签名会话 cookie,生产环境务必设置一个长随机串(可用openssl rand -hex 32生成)。extra_hosts:把host.docker.internal指向宿主网关,方便后续在容器里访问宿主服务(不在本文主流程里,但保留以备后用)。- volumes:
ollama:/root/.ollama:模型文件持久化,重建容器不会丢模型。open-webui:/app/backend/data:用户、对话历史、知识库、上传文件等都存在这里。
启动两个服务:
docker compose up -d
第一次启动会拉镜像,需要几分钟。完成后查看状态:
docker compose ps
两个容器都应是 running(Open WebUI 会等 Ollama 健康后再起,所以 depends_on 已经处理好顺序)。
### 第二步:拉一个模型到 Ollama
Open WebUI 默认连上 Ollama 后,下拉框里只显示 Ollama 实际加载的模型。先拉一个常用的:
docker exec -it ollama ollama pull qwen2.5:7b
这条命令在 Ollama 容器内执行,下载千问 2.5 7B 量级模型(具体大小与 tag 以官方为准)。如果想用更小的模型起步,可以换成:
docker exec -it ollama ollama pull llama3.2:3b
下载过程中可以另开终端跑 docker exec ollama ollama list 看是否出现在列表里。

第三步:访问 Open WebUI 并创建管理员
Open WebUI 默认监听宿主 3000 端口(容器内 8080)。浏览器打开:
http://:3000
第一次进入会要求注册账号。第一个注册的账号自动成为管理员——这是 Open WebUI 的设计,请尽快用它登录,再后续创建普通用户。
登录后界面和 ChatGPT 类似:左侧会话列表,中间对话区,顶部模型选择器。
### 第四步:在 Web 界面连接 Ollama 模型
Open WebUI 在环境变量里已经指定了 OLLAMA_BASE_URL=http://ollama:11434,一般情况下不需要再手动配。但如果你之前改过地址、或者要接远程 Ollama,需要到设置里调整:
- 点击右上角头像 → Settings → Connections(或 Admin Panel → Settings → Connections,不同版本路径略有差异)。
- 在 Ollama API 一栏,确保 URL 为
http://ollama:11434(如果是 Compose 内置 Ollama)或http://host.docker.internal:11434(如果是宿主原生装的 Ollama)。 - 点击 Save 后刷新页面。
回到对话界面,点顶部模型下拉框,应该能看到刚才 ollama pull 拉下来的模型(如 qwen2.5:7b)。选中它,发条消息就能看到回复了。
### 第五步:基础使用
- 多轮对话:直接继续打字即可,对话历史会自动保存到左侧列表。
- 新建会话:左上角”New Chat”按钮。
- 系统提示词(System Prompt):点输入框上方的 ⚙ 图标或新建会话时设置,可以为这个会话指定角色。
- 切换模型:同一个会话内可在模型下拉里切换,前提是 Ollama 已经下载对应模型。
- 停止生成:回复过程中按钮会变成”Stop”,可以中断。
第六步:进阶功能
本地知识库 / RAG
对话输入框左侧有一个 📎 图标,点击可以上传 PDF、Word、TXT 等文件。Open WebUI 会在后台做 embedding、切片、建索引,下次用 # 加文件名引用就能让模型回答相关问题。
多用户与权限
以管理员身份进入 Admin Panel → Users,可以:
- 创建或禁用用户;
- 设置用户组(Groups);
- 给不同组配置可用模型、知识库。
Open WebUI 默认每个用户的数据是隔离的,跨用户共享需要显式配置。
模型参数调节
新建会话时点 ⚙,可以设置:
- Temperature:越高越发散(0.7 是常用值)。
- Top P / Top K:核采样参数。
- Context Length:上下文长度,受 Ollama 模型本身限制。
- System Prompt:让模型扮演特定角色。
联网搜索与网页抓取
在 Admin Panel → Settings → Web Search 里,可以配置 SearXNG、Tavily、Brave 等搜索 provider;在对话里用 # 加 URL,模型就会把网页内容带进上下文。
常见问题
1. 容器里访问不到宿主 Ollama
如果在用宿主原生 Ollama 而非 Compose 内置 Ollama,容器里 localhost 是容器自身。必须用 host.docker.internal(Docker Desktop / Linux 较新版都支持),并在 Compose 里加 extra_hosts: ["host.docker.internal:host-gateway"]——仓库默认已经加了。
2. 端口 3000 被占用
启动前 export:
export OPEN_WEBUI_PORT=8080
docker compose up -d
或者直接修改 Compose 文件里的 ${OPEN_WEBUI_PORT-3000} 为其他端口。
3. 模型下拉框是空的
先确认 docker exec ollama ollama list 在容器内能看到模型,再确认 Open WebUI 设置里的 Ollama URL 正确。如果用过 SQLite 加密或外部数据库迁移,可能需要重新登录并触发一次模型刷新。
4. 内存吃满 / 推理很慢
- 优先用更小的模型(如 3B、7B)。
- 关闭其他吃内存的程序。
- 有 NVIDIA GPU 时,使用
:cuda标签的镜像(仓库 README 提到:ollama和:cudatag)。 - 模型切换频繁会反复加载,建议常驻 1–2 个模型。
5. 重装后数据丢失
检查 volumes:docker volume inspect ollama open-webui 看挂载点。Compose 里这两个 volume 是命名卷,重建容器不会丢数据;但如果用 docker compose down -v 会连 volume 一起删,请慎用。
收尾
到这里,Ollama + Open WebUI 的最小可用部署就完成了。后续如果要继续往生产化方向走,建议先做两件事:设置 WEBUI_SECRET_KEY、把数据卷挂到独立备份目录,再按团队规模决定是否迁移到 PostgreSQL + 外部向量库。如果你想对 Ollama 上各模型的本地表现有个横向参考,可以看这篇本地大模型评测:Ollama 上跑过的那些模型横评。

评论(0)