Docker + Open WebUI + Ollama:搭建私有 AI 对话平台

- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入我的个人主页查看
前言
随着大语言模型(LLM)的快速发展,越来越多的人希望在自己的服务器上部署私有的AI对话服务。Ollama作为一款轻量级的本地大模型运行框架,可以方便地下载和运行各种开源模型;而Open WebUI则提供了一个功能强大的Web交互界面,让用户可以通过浏览器与本地部署的AI模型进行对话。
本文将详细介绍如何在Linux服务器上,使用Docker部署Open WebUI,并连接本地原生运行的Ollama服务,最终搭建一个完全私有、数据安全的AI对话平台。
部署架构说明:本文采用“分离部署”方案——Ollama在宿主机上原生运行(充分利用GPU资源),Open WebUI在Docker容器中运行,两者通过网络通信。这种架构的优势在于:Ollama可以直接调用宿主机的GPU,无需在容器中配置复杂的GPU驱动;同时两个服务相互独立,便于分别升级和维护。
一、环境准备
1.1 硬件与系统要求
- 操作系统:Linux(本文以Ubuntu为例)
- Docker:建议版本 28.1.1 及以上
- Ollama:建议版本 0.32.14 及以上
- 网络:服务器能够访问互联网(用于下载镜像和模型)
1.2 安装Docker
如果尚未安装Docker,可以使用以下命令快速安装。详细安装教程可查阅Ubuntu 20.04 LTS 安装 Docker 指南。
curl -fsSL https://get.docker.com | bash
sudo systemctl enable docker
sudo systemctl start docker
验证安装:
docker --version
1.3 安装Ollama
Ollama需要安装在宿主机上(非Docker容器内),以便直接调用GPU资源。详细安装教程可查阅Ubuntu 20.04 下使用 Ollama 本地部署 AI 大模型。
curl -fsSL https://ollama.com/install.sh | sh
安装完成后,启动Ollama服务:
sudo systemctl enable ollama
sudo systemctl start ollama
1.4 关键配置:让Ollama监听所有网络接口
这是整个部署中最容易忽略的一步。 默认情况下,Ollama只监听 127.0.0.1:11434,仅允许本机进程访问。Docker容器拥有独立的网络空间,其IP地址(如 172.17.0.x)不属于 127.0.0.1,因此容器内的Open WebUI无法直接连接Ollama。
解决方法:修改Ollama的systemd服务配置,让它监听 0.0.0.0:11434。
sudo systemctl edit ollama
在打开的编辑器中输入以下内容:
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
保存退出后,重启Ollama服务:
sudo systemctl daemon-reload
sudo systemctl restart ollama
验证Ollama是否已监听所有地址:
netstat -tulpn | grep 11434
如果看到 0.0.0.0:11434 或 :::11434,说明配置成功。
二、部署Open WebUI
2.1 选择镜像版本
Open WebUI的Docker镜像托管在GitHub Container Registry(ghcr.io)上。本文推荐使用 v0.11.0 版本,这是新发布的里程碑版本,带来了全新的界面设计、子代理系统、聊天变量等重大更新。
为什么选择v0.11.0而不是latest? 在实际部署中,
main标签的镜像可能因版本跨度太大导致数据库迁移失败。使用具体的版本号(如0.11)可以避免这类兼容性问题。
2.2 拉取镜像
由于ghcr.io在国内访问速度较慢,可以使用华为云镜像站加速拉取:
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/open-webui/open-webui:0.11
拉取完成后,给镜像打上标准标签以便后续使用:
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/open-webui/open-webui:0.11 ghcr.io/open-webui/open-webui:0.11

2.3 启动容器
使用以下命令启动Open WebUI容器:
docker run -d \
--name open-webui \
-p 3000:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-e OLLAMA_REQUEST_TIMEOUT=120 \
--add-host host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--restart unless-stopped \
ghcr.io/open-webui/open-webui:0.11

2.4 命令参数详解
| 参数 | 说明 |
|---|---|
-d | 后台运行容器 |
--name open-webui | 指定容器名称 |
-p 3000:8080 | 将宿主机的3000端口映射到容器内的8080端口 |
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 | 告诉Open WebUI去哪个地址寻找Ollama服务 |
-e OLLAMA_REQUEST_TIMEOUT=120 | 设置请求超时时间为120秒,避免大模型生成较慢时超时 |
--add-host host.docker.internal:host-gateway | 关键参数:在容器内将 host.docker.internal 解析为宿主机的IP地址 |
-v open-webui:/app/backend/data | 挂载数据卷,持久化存储用户数据、聊天记录等 |
--restart unless-stopped | 设置容器自动重启策略 |
关于 host.docker.internal 的说明:在Linux下,Docker容器默认无法通过 localhost 访问宿主机。--add-host host.docker.internal:host-gateway 在容器的 /etc/hosts 文件中添加了一条记录,将 host.docker.internal 指向宿主机的真实IP。这样Open WebUI就能通过 http://host.docker.internal:11434 访问到宿主机上的Ollama服务了。
三、验证部署
3.1 检查容器状态
docker ps | grep open-webui
如果看到状态为 Up,说明容器运行正常。
3.2 访问Open WebUI
在浏览器中访问 http://你的服务器IP:3000。

3.3 注册管理员账号
首次访问时,页面会提示注册账号。第一个注册的用户将自动成为管理员。填写名称、邮箱和密码后点击创建。
注意:Open WebUI不会对邮箱进行真实性验证,可以填写任意格式正确的邮箱地址。

3.4 下载并选择模型
在宿主机上下载所需的AI模型,例如:
ollama pull qwen3.5:2b
下载完成后,刷新Open WebUI页面,在左上角的模型下拉菜单中就可以看到并选择该模型了。

3.5 测试对话
在对话框中输入消息(如“你好”),如果模型正常返回回复,说明整个部署已成功。

四、常见问题与解决方案
4.1 网页打不开 / 连接被拒绝
症状:浏览器访问 http://服务器IP:3000 无响应或超时。
可能原因:
- 服务器防火墙未放行3000端口
- 云服务器安全组未配置入站规则
解决方案:
检查防火墙状态(以ufw为例):
sudo ufw status
如果防火墙已开启,放行3000端口:
sudo ufw allow 3000/tcp
如果使用的是云服务器(阿里云、腾讯云、华为云等),还需要在云控制台的安全组中添加入站规则,允许TCP协议的3000端口。
4.2 “No text generated from Ollama”错误
症状:Open WebUI能列出模型列表,但发送消息后提示“No text generated from Ollama”。
可能原因:
- Ollama未监听
0.0.0.0,导致容器无法访问 - 容器内无法解析
host.docker.internal
解决方案:
- 确认Ollama已监听所有地址(参考1.4节)。
- 进入容器测试连通性:
docker exec -it open-webui curl http://host.docker.internal:11434/api/tags
如果返回模型列表JSON,说明网络通畅。
4.3 “需要后端服务”错误
症状:页面显示“Open WebUI需要后端服务”。
可能原因:
- 数据库迁移失败(尤其从旧版本升级时)
- 数据卷中的数据库结构与当前版本不兼容
解决方案:
如果是从旧版本升级遇到此问题,最彻底的方法是备份数据后重建:
# 备份数据
docker cp open-webui:/app/backend/data ./open-webui-backup
# 停止并删除容器
docker stop open-webui && docker rm open-webui
# 删除数据卷
docker volume rm open-webui
# 重新创建容器
docker run -d \
--name open-webui \
-p 3000:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-e OLLAMA_REQUEST_TIMEOUT=120 \
--add-host host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--restart unless-stopped \
ghcr.io/open-webui/open-webui:0.11
⚠️ 注意:删除数据卷会丢失所有聊天记录和用户数据,请务必先备份。
4.4 普通用户看不到模型
症状:管理员账号能看到所有模型,但普通用户看不到任何模型。
原因:Open WebUI的模型默认是**私有(Private)**状态,仅对管理员可见。
解决方案(二选一):
方法一:通过管理界面修改(推荐)
- 使用管理员账号登录
- 进入 管理员面板(Admin Panel) → 设置(Settings) → 模型(Models)
- 点击模型右侧的编辑按钮(铅笔图标)
- 将 可见性(Visibility) 从 私有(Private) 改为 公共(Public)
- 点击保存
方法二:使用环境变量全局开放
在启动容器时添加 -e BYPASS_MODEL_ACCESS_CONTROL=true,此方法会绕过所有模型访问控制。
4.5 镜像拉取速度慢
症状:docker pull ghcr.io/open-webui/open-webui:0.11 下载极慢或超时。
解决方案:
使用国内镜像站拉取(如华为云SWR):
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/open-webui/open-webui:0.11
docker tag 华为云镜像地址 ghcr.io/open-webui/open-webui:0.11
或配置Docker镜像加速器(编辑 /etc/docker/daemon.json):
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
然后重启Docker:sudo systemctl restart docker。
五、数据持久化与备份
5.1 数据存储位置
命令中的 -v open-webui:/app/backend/data 创建了一个Docker命名卷(Named Volume)。该卷的实际存储位置可以通过以下命令查看:
docker volume inspect open-webui
输出中的 "Mountpoint" 字段即为数据在宿主机上的真实路径。
5.2 备份数据
# 方式一:通过docker cp导出
docker cp open-webui:/app/backend/data ./backup_$(date +%Y%m%d)
# 方式二:直接备份数据卷目录
sudo cp -r /var/lib/docker/volumes/open-webui/_data ./backup_$(date +%Y%m%d)
5.3 恢复数据
将备份目录复制回数据卷的挂载点,或使用 docker cp 将数据复制回容器:
docker cp ./backup_20260818/. open-webui:/app/backend/data/
六、进阶配置
6.1 局域网内多设备访问
在同一局域网内的其他设备上,通过 http://服务器IP:3000 即可访问Open WebUI。
注意:需要确保服务器防火墙已放行3000端口。
6.2 开启用户注册(多用户模式)
第一个管理员账号创建后,Open WebUI默认会关闭公开注册。如需允许新用户注册:
- 使用管理员账号登录
- 进入 管理员面板 → 设置 → 认证(Authentication)
- 打开 允许新用户注册(Enable New Sign Ups) 开关
也可以设置 DEFAULT_USER_ROLE=pending,让新用户注册后需要管理员手动批准。
6.3 关闭登录验证(单用户模式)
如果仅个人使用,不想每次登录都输入账号密码,可以添加环境变量:
-e WEBUI_AUTH=False
⚠️ 注意:此模式仅适用于全新安装(没有已有用户数据的情况),且所有访问者共享同一会话。
6.4 使用Docker Compose(可选)
如需更规范的服务管理,可以创建 docker-compose.yml 文件:
services:
open-webui:
image: ghcr.io/open-webui/open-webui:0.11
container_name: open-webui
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://host.docker.internal:11434
- OLLAMA_REQUEST_TIMEOUT=120
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- open-webui:/app/backend/data
restart: unless-stopped
volumes:
open-webui:
然后使用 docker compose up -d 启动。
七、总结
通过本文的步骤,你已经成功在Linux服务器上完成了以下工作:
- ✅ 安装并配置Ollama,使其监听所有网络接口
- ✅ 使用Docker部署Open WebUI v0.11.0
- ✅ 解决容器与宿主机之间的网络通信问题
- ✅ 完成管理员账号注册和模型配置
- ✅ 掌握了常见问题的排查方法
至此,一个完全私有、数据安全的本地AI对话平台已经搭建完成。你可以随时下载新的模型、邀请团队成员使用,并根据需要调整各种配置。Open WebUI v0.11.0带来的全新界面设计、子代理系统等功能,将为你的AI应用提供更强大的支持。
参考
[1] https://docs.docker.com/desktop/setup/install/linux/ubuntu
[2] https://github.com/open-webui/open-webui.git
[3] https://docs.ollama.com

3万+

被折叠的 条评论
为什么被折叠?



