Skip to content

[Bug] Fix SQLite Database Corruption After OpenResty Update Failure and Container Rebuild #13404

Description

@mxlt02

Contact Information

No response

1Panel Version

专业版 v2.2.4

Problem Description

[Bug] OpenResty 更新拉取失败后容器异常,重建后监控 SQLite 数据库损坏

1Panel 版本

专业版 v2.2.4

OpenResty 版本

  • 更新前版本:1panel/openresty:1.27.1.2-5-1-focal
  • 目标版本:1panel/openresty:1.31.1.1-2-1-noble
  • 操作系统:Debian 12
  • 使用场景:1Panel 专业版,企业生产环境
  • 镜像配置:使用 1ms 镜像加速服务

问题描述

2026 年 7 月 29 日,我在 1Panel 应用商店中点击 OpenResty 的更新按钮。更新期间镜像拉取速度较慢,随后面板提示更新失败。

更新失败后,OpenResty 容器出现异常,现象与 #11671 基本一致。网站一度无法访问,生产服务中断约 10 分钟。后来我在面板中点击了重建,容器才恢复运行。

容器恢复后,OpenResty 开始持续输出以下错误:

[lua] monitor_task.lua:361: insert_monitor_data(): insert_site_req_log error: database disk image is malformed, context: ngx.timer

该错误会由定时任务重复输出,短时间内产生大量相同日志。

我检查了 1Panel WAF 数据目录下的全部 SQLite 数据库。除以下文件外,其余数据库执行 PRAGMA quick_check 均返回 ok

/opt/1panel/apps/openresty/openresty/1pwaf/data/db/monitor/<domain>/site_req_logs.db

该文件返回:

database disk image is malformed

最终的临时处理方式是备份并改名损坏的 site_req_logs.db,然后对 OpenResty 执行平滑 reload。程序重新创建数据库后,错误消失。

复现过程

  1. OpenResty 已通过 1Panel 部署并承载线上网站。
  2. Docker 配置了 1ms 镜像加速服务。
  3. 在 1Panel 应用商店点击 OpenResty 更新。
  4. 镜像拉取较慢,更新最终提示失败。
  5. OpenResty 容器进入异常状态,网站无法访问。
  6. 在面板中点击重建后,容器和网站恢复。
  7. OpenResty 日志开始持续出现 database disk image is malformed
  8. 检查确认 <domain>/site_req_logs.db 已损坏。

目前无法确认数据库损坏发生在更新、容器重建还是数据库迁移阶段,但时间上与本次更新失败直接相邻。

实际影响

  • 生产网站中断约 10 分钟。
  • 更新失败后没有自动恢复到原有可用版本。
  • 用户需要自行尝试重建容器才能恢复服务。
  • WAF 监控数据库损坏并持续刷错误日志。
  • 面板没有指出具体损坏文件,也没有提供自动修复入口。
  • 1个小时就产生了30g的数据垃圾报错日志, 如果不及时跟进。 很快硬盘应该满了就宕机了;

期望行为

希望 OpenResty 更新流程增加以下保护:

  1. 完整拉取并校验新镜像后,再停止或替换旧容器。
  2. 镜像拉取、容器创建或健康检查失败时,自动恢复旧容器和旧版本。
  3. 更新涉及 WAF 或监控数据库时,提前备份并执行完整性检查。
  4. 更新失败时保留可用容器,不要让生产服务停留在容器缺失或不可用状态。
  5. 面板提供更明确的错误信息,至少能区分镜像拉取失败、容器创建失败和数据库损坏。
  6. 对仅保存监控日志的损坏数据库,提供备份后自动重建的修复选项。

相关 Issue

  • #11671:OpenResty 更新失败后提示容器不存在,点击重建后恢复,与本次更新阶段的症状接近。
  • #10743:记录了完全相同的 insert_site_req_log error: database disk image is malformed 错误。

#10743 已被关闭,但从本次情况看,相同问题仍然可能发生。希望维护团队能够说明该问题此前的处理结论,以及当前版本是否已经包含对应修复。

补充说明

我购买了 1Panel 专业版,并将其用于公司的生产环境。对生产用户来说,面板中的更新按钮应当具备基本的失败回滚和数据保护能力。

我理解第三方镜像加速服务的速度或可用性不完全由 1Panel 控制,但拉取失败是部署系统必须处理的常见情况。新镜像尚未准备完成时,旧容器应继续提供服务;后续步骤失败时,也应能够自动回滚。

这次故障最终可以通过重建容器和重建监控数据库解决,但排查过程依赖较多人工操作。作为专业版用户,我对这次更新体验确实比较失望,也希望团队不要将它简单归为卸载重装即可解决的个例。请协助确认更新流程是否存在时序、回滚或数据库迁移方面的问题。

最重要的是通过两个相关 issue 的处理态度, 让我对贵司在企业级应用领域的准备产生担忧

The expected correct result

No response

Related log output

Additional Information

No response

Metadata

Metadata

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions