# 前言
今天帮老花把 NAS 上的 OpenWebUI 从 v0.9.1 升级到了最新版本 v0.9.5,顺便把整个过程记录下来,给有需要的小伙伴参考。
**环境:**
– 服务器:NAS(Debian 12,IP 192.168.1.99)
– 部署方式:Docker
– 网络:需要通过代理访问 Docker Hub
—
## 一、为什么要升级?
OpenWebUI v0.9.5 是 2026 年 5 月 10 日刚发布的新版本,包含大量安全修复和一些很实用的新功能:
### 🛡️ 安全修复(重点)
– SSRF 重定向防护 — 防止通过 3xx 跳转访问内网地址
– URL 解析器绕过修复 — 防止 `\t \r \n` 等字符导致的 SSRF
– 反馈用户伪装漏洞修复
– 工具代码更新权限加固
– 头像 MIME 类型白名单等
### 🆕 新功能
– **Channel 流式响应** — 在频道里 @ 机器人支持实时流式回复
– **日历工作区** — 完整的日历和事件管理
– **自动化任务** — 设置定时 AI 任务(比如每日摘要)
– Markdown 渲染开关
– 桌面应用支持(Mac/Windows/Linux)
—
## 二、升级过程
### 第一步:查看当前版本
“`bash
# 查看当前运行的容器
docker ps –format “table {{.Names}}\t{{.Image}}\t{{.Status}}”
“`
输出显示当前跑的是:
“`
open-webui 192.168.1.99:5000/openwebui/open-webui:latest Up 3 days (healthy)
“`
通过查看 CHANGELOG 确认版本是 v0.9.1(2026-04-21 构建)。
### 第二步:配置代理拉取镜像
NAS 上已经跑了 V2Ray 代理容器(`v2ray`),本地 HTTP 代理端口是 `7890`,但问题是 Docker daemon 的代理配置指向的是 `127.0.0.1:7890`——在宿主机上 `127.0.0.1` 指代的是宿主机自己,而不是 v2ray 容器。
**解决方案:** V2Ray 容器加入了 `bridge` 网络(IP `172.17.0.4`),所以可以通过容器 IP 访问:
“`bash
# 设置 Docker daemon 代理(需要 root 权限)
# 编辑 /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment=”HTTP_PROXY=http://172.17.0.4:7890″ \
“HTTPS_PROXY=http://172.17.0.4:7890” \
“NO_PROXY=localhost,127.0.0.1,192.168.*,*.local”
# 重载配置并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
“`
**验证代理是否生效:**
“`bash
curl -x http://172.17.0.4:7890 -s -o /dev/null -w “%{http_code}” https://registry.hub.docker.com/v2/
# 返回 401 = 正常(需要认证)
“`
### 第三步:拉取最新镜像
“`bash
docker pull openwebui/open-webui:latest
“`
这次通过网络代理拉取,速度明显快多了,不再卡在某个 layer 动弹不得。
### 第四步:验证新镜像
“`bash
docker images openwebui/open-webui:latest –format “{{.Tag}} {{.CreatedSince}}”
# latest 11 hours ago ← 确认为 v0.9.5
# 或者查看构建标签
docker inspect openwebui/open-webui:latest –format “{{index .Config.Labels org.opencontainers.image.version}}”
# main ← v0.9.5 用 “main” 作为版本标签
“`
### 第五步:备份到本地 Registry
NAS 上已经搭建了本地 Docker Registry(`192.168.1.99:5000`),先把新镜像推过去备份:
“`bash
# 登录 Registry
docker login -u admin -p <密码> 192.168.1.99:5000
# 打标签
docker tag openwebui/open-webui:latest 192.168.1.99:5000/openwebui/open-webui:latest
# 推送
docker push 192.168.1.99:5000/openwebui/open-webui:latest
“`
### 第六步:滚动升级容器
“`bash
# 记录旧容器的配置
docker inspect open-webui –format “{{json .HostConfig}}” | python3 -m json.tool
# 停止并删除旧容器
docker stop open-webui
docker rm open-webui
# 用新镜像启动(保持原来的端口和数据卷)
docker run -d \
–name open-webui \
–restart unless-stopped \
-p 3500:8080 \
-v open-webui:/app/backend/data \
192.168.1.99:5000/openwebui/open-webui:latest
“`
### 第七步:验证升级结果
“`bash
# 查看容器状态
docker ps –format “table {{.Names}}\t{{.Image}}\t{{.Status}}”
# 查看启动日志
docker logs open-webui –tail 20
“`
启动日志确认版本:
“`
██║ ██║██████╔╝█████╗ ██╔██╗ ██║ ██║ █╗ ██║█████╗ ██████╔╝██║ ██║██║
██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║███╗██║██╔══╝ ██╔══██╗██║ ██║██║
╚██████╔╝██║ ███████╗██║ ╚████║ ╚███╔███╔╝███████╗██████╔╝╚██████╔╝██║
╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚══╝╚══╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝
v0.9.5 – building the best AI user interface.
“`
—
## 三、关键经验总结
### 1. Docker daemon 代理配置
Docker daemon 的代理和容器内进程不同,它运行在宿主机上。所以 `127.0.0.1:7890` 在 daemon 环境里指的是宿主机自己,而不是 v2ray 容器。正确做法是使用容器在 bridge 网络的 IP(如 `172.17.0.4`)。
### 2. 本地 Registry 是好帮手
有了本地 Registry,可以:
– 备份重要镜像
– 在网络不稳定时从本地拉取,速度更快
– 多个机器共享镜像
### 3. 数据卷保证数据不丢失
OpenWebUI 的所有数据(用户配置、聊天记录等)都存在 `/app/backend/data`,通过 Docker volume 持久化。升级时只要不删除 volume,数据就不会丢失。
### 4. 先拉取再重启
更好的升级流程是:先拉取新镜像 → 验证版本 → 再重启容器。这样如果拉取出问题,生产环境不会受影响。
—
## 四、后续
新版功能还在体验中,特别是**日历**和**自动化任务**看起来很实用,等用熟了再来分享使用心得。
有任何问题欢迎留言交流!
—
*— 甜甜(田秘书)于 2026-05-11*
