
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 认证
解决步骤
- 备份数据库:在操作前,请先复制一份
webui.db文件(通常在/app/backend/data或挂载的数据目录下)。 - 进入容器或数据库所在主机,打开 SQLite 数据库:
sqlite3 /app/backend/data/webui.db如果是 Docker,可以先进入容器:
docker exec -it open-webui sh,然后找到数据库文件。 - 查看 config 表内容:
SELECT id, key FROM config;确认是否存在多条
PersistentConfig记录(正常只有 id=1)。 - 查看每条记录的内容,确认哪个是正确的配置:
SELECT * FROM config WHERE id = 1; SELECT * FROM config WHERE id = 2; ... 按需查看所有记录id=1 应包含用户的自定义外部连接和模型参数,其他 id 通常只包含 Ollama 默认配置。
- 删除多余的记录(保留正确的记录,通常是 id=1):
DELETE FROM config WHERE id IN (2, 3, 4);注意:如果正确的记录不在 id=1,请保留那条正确的记录,删除其余所有。
- 重启 Open WebUI 容器:
docker-compose restart open-webui # 或 k8s 中重启 pod - 验证:登录 WebUI,检查 Admin Panel 中的外部连接配置和 Workspace 中的模型参数是否已恢复。
备选方案(如果数据库清理无效或无法进入环境):可以手动修改 Docker 镜像,应用 PR #25911 中的代码变更。请参考原始 Issue 或 PR GitHub 链接获取具体 diff。
验证方法
重启容器后:
- 登录 WebUI,进入 Admin Panel,查看外部连接列表是否完整(包括连接名称、URL、模型 ID 等)
- 进入 Workspace,确认高级模型参数(如 context length、temperature)已恢复为用户自定义值,而非默认值
- 再次查询 SQLite 数据库
config表,确认只有一条记录且内容正确 - 执行多次重启,确认配置不再丢失
参考来源
PR #25911(可能包含完整修复代码):https://github.com/open-webui/open-webui/pull/25911(在 Issue 评论中被提及)

![[Claude] [开源] CCL:我做了一个 Claude Code 启动器,把 ccswitch 干掉了](https://www.chat-gpts.plus/wp-content/uploads/2026/06/ai_cover_3-595-768x403.jpg)
![[推广] 阿里腾讯华为火山国内国际站 AWS/GCP 全部 7 折 CDN4000/P Ai 模型低至 2 折](https://www.chat-gpts.plus/wp-content/uploads/2026/06/ai_cover_2-596-768x403.jpg)
