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

解决方案

  1. 确认Ollama已监听所有地址(参考1.4节)。
  2. 进入容器测试连通性:
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)**状态,仅对管理员可见。

解决方案(二选一):

方法一:通过管理界面修改(推荐)

  1. 使用管理员账号登录
  2. 进入 管理员面板(Admin Panel)设置(Settings)模型(Models)
  3. 点击模型右侧的编辑按钮(铅笔图标)
  4. 可见性(Visibility)私有(Private) 改为 公共(Public)
  5. 点击保存

方法二:使用环境变量全局开放
在启动容器时添加 -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默认会关闭公开注册。如需允许新用户注册:

  1. 使用管理员账号登录
  2. 进入 管理员面板设置认证(Authentication)
  3. 打开 允许新用户注册(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服务器上完成了以下工作:

  1. ✅ 安装并配置Ollama,使其监听所有网络接口
  2. ✅ 使用Docker部署Open WebUI v0.11.0
  3. ✅ 解决容器与宿主机之间的网络通信问题
  4. ✅ 完成管理员账号注册和模型配置
  5. ✅ 掌握了常见问题的排查方法

至此,一个完全私有、数据安全的本地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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FriendshipT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值