issue: PersistentConfig Duplicate Inserts Cause External Connections and Model Parameters to be Lost After Restart

用户通过 Docker 或 Kubernetes 部署 Open WebUI 0.9.2 至 0.9.6 版本,使用 llamaCpp server + api_proxy (未使用 Ollama),启用了 Async Context Compression plugin 等第三方插件。在 Admi

issue: PersistentConfig Duplicate Inserts Cause External Connections and Model Parameters to be Lost After Restart

issue: PersistentConfig Duplicate Inserts Cause External Connections and Model Parameters to be Lost After Restart

快速结论:此问题通常出现在 Open WebUI 容器重启后,通过 WebUI 配置的外部连接(如 OpenAI / llama.cpp 服务)和高级模型参数(如 context length、temperature)被清空或恢复为默认值。优先排查 SQLite 数据库 config 表中是否存在多条 PersistentConfig 记录(通常 id=2,3,4 为重复的默认配置),并手动清理多余记录。

问题场景

用户通过 Docker 或 Kubernetes 部署 Open WebUI 0.9.2 至 0.9.6 版本,使用 llamaCpp server + api_proxy(未使用 Ollama),启用了 Async Context Compression plugin 等第三方插件。在 Admin Panel 中添加了多个外部 OpenAI 连接(指向不同端口/服务),并在 Workspace 中设置了高级模型参数。重启容器后,外部连接配置消失,高级模型参数恢复为默认值。

报错原文

-- 数据库查询结果示例 --
sqlite> SELECT * FROM config;
id=1: 包含完整的外部连接配置(两个 llama.cpp 服务连接、模型 ID 等)
id=2: 仅包含 Ollama 默认配置("ollama": {"enable": false, "base_urls": [...]})
id=3: 仅包含 Ollama 默认配置(同上)
id=4: 仅包含 Ollama 默认配置(同上)

-- 预期行为 --
添加的外部连接和高级模型参数应在重启后持久化。

-- 实际行为 --
重启后系统加载了最后一条配置记录(id=4),导致外部连接丢失,参数恢复默认。

原因分析

可能原因:Open WebUI 的 PersistentConfig 机制在启动或运行过程中向 SQLite 数据库的 config 表插入了多条重复的默认配置记录(仅 id=1 包含用户自定义设置)。重启时,系统可能加载了最后一条记录(如 id=4),而非正确的 id=1 记录,导致外部连接和自定义模型参数被覆盖。

此问题在默认 Docker 环境中较难复现,但在以下环境中被多次报告:

  • 使用 Kubernetes (k8s) 部署,且启用了 OIDC 认证
  • 运行过程中触发了第三方插件(如 Async Context Compression)或 Code Interpreter,可能并发写入 config 表
  • 数据库为 SQLite(webui.db)或 PostgreSQL

注意:官方开发者此前因无法复现已关闭该 Issue,但多位用户通过手动清理数据库重复记录临时解决了问题。更长期的修复可能参考了 PR #25911 中的代码变更。

环境排查

  • 确认 Open WebUI 版本:0.9.2、0.9.5、0.9.6(均有用户报告此问题)
  • 确认部署方式:Docker / Docker Compose / Kubernetes (k8s)
  • 确认是否启用了 ENABLE_PERSISTENT_CONFIG=false(默认应为 true,持久化行为正常)
  • 确认 RESET_CONFIG_ON_START=false 已正确设置
  • 确认数据目录已正确挂载到外部磁盘且有读写权限
  • 检查 SQLite 数据库 config 表中记录数:SELECT id, COUNT(*) FROM config;(正常应只有一条)
  • 确认是否使用了第三方插件(如 Async Context Compression)
  • 确认是否启用了 OIDC 认证

解决步骤

  1. 备份数据库:在操作前,请先复制一份 webui.db 文件(通常在 /app/backend/data 或挂载的数据目录下)。
  2. 进入容器或数据库所在主机,打开 SQLite 数据库:
    sqlite3 /app/backend/data/webui.db

    如果是 Docker,可以先进入容器:docker exec -it open-webui sh,然后找到数据库文件。

  3. 查看 config 表内容:
    SELECT id, key FROM config;

    确认是否存在多条 PersistentConfig 记录(正常只有 id=1)。

  4. 查看每条记录的内容,确认哪个是正确的配置:
    SELECT * FROM config WHERE id = 1;
    SELECT * FROM config WHERE id = 2;
    ... 按需查看所有记录

    id=1 应包含用户的自定义外部连接和模型参数,其他 id 通常只包含 Ollama 默认配置。

  5. 删除多余的记录(保留正确的记录,通常是 id=1):
    DELETE FROM config WHERE id IN (2, 3, 4);

    注意:如果正确的记录不在 id=1,请保留那条正确的记录,删除其余所有。

  6. 重启 Open WebUI 容器:
    docker-compose restart open-webui
    # 或 k8s 中重启 pod
  7. 验证:登录 WebUI,检查 Admin Panel 中的外部连接配置和 Workspace 中的模型参数是否已恢复。

备选方案(如果数据库清理无效或无法进入环境):可以手动修改 Docker 镜像,应用 PR #25911 中的代码变更。请参考原始 Issue 或 PR GitHub 链接获取具体 diff。

验证方法

重启容器后:

  • 登录 WebUI,进入 Admin Panel,查看外部连接列表是否完整(包括连接名称、URL、模型 ID 等)
  • 进入 Workspace,确认高级模型参数(如 context length、temperature)已恢复为用户自定义值,而非默认值
  • 再次查询 SQLite 数据库 config 表,确认只有一条记录且内容正确
  • 执行多次重启,确认配置不再丢失

参考来源

open-webui/open-webui #24743

PR #25911(可能包含完整修复代码):https://github.com/open-webui/open-webui/pull/25911(在 Issue 评论中被提及)

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 7843

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注