Skip to content

[反馈]: 浏览器页面错误可能导致 Node 进程崩溃,并让 Docker 容器反复重启 #185

Closed

Description

@syazyz

部署平台

Docker

版本号

ghcr.io/ibuhub/aistudio-to-api:v1.2.5

客户端/工具

No response

请求接口

OpenAI - Chat Completions

问题/请求描述

版本信息

  • AIStudioToAPI: v1.2.5
  • Docker image: ghcr.io/ibuhub/aistudio-to-api:v1.2.5
  • Node.js: v24.15.0
  • playwright-core: 1.60.0
  • 浏览器:Camoufox / Firefox

问题描述

在 AI Studio 页面初始化 context 时,如果页面内部抛出某些错误,AIStudioToAPI 的 Node 主进程可能会直接崩溃。

我们这边观察到的页面错误包括:

  • Failed to load user preferences from backend Error
  • Failed to list models. Please try again.
  • 部分失败页面会跳到 Available regions for Google AI Studio and Gemini API

真正导致容器重启的不是这些页面错误本身,而是 Playwright 在处理 page error 时访问了空的 location 字段。

崩溃日志

/app/node_modules/playwright-core/lib/coreBundle.js:49624
              url: pageError.location.url,
                                      ^

TypeError: Cannot read properties of undefined (reading 'url')
    at FFBrowserContext.<anonymous> (/app/node_modules/playwright-core/lib/coreBundle.js:49624:39)
    at FFBrowserContext.emit (node:events:509:28)
    at _Page.emitOnContext (/app/node_modules/playwright-core/lib/coreBundle.js:19815:29)
    at _Page.addPageError (/app/node_modules/playwright-core/lib/coreBundle.js:19951:16)
    at FFPage._onUncaughtError (/app/node_modules/playwright-core/lib/coreBundle.js:43470:20)

实际影响

Docker Compose 中服务配置了 restart: unless-stopped,所以 Node 进程崩溃后容器会立刻重启。

这会带来两个问题:

  1. Web Console 的 session 存在内存里,容器重启后登录态丢失,表现为登录后几秒钟自动刷新回登录页。
  2. 原本只是某个 AI Studio context 初始化失败,却升级成整个服务反复重启。

期望行为

页面错误或代理/地区问题导致 context 初始化失败时,应该只影响当前 context,例如:

  • 标记当前 context 初始化失败
  • 尝试下一个 auth
  • 在 Web Console / logs 中提示代理或地区不可用
  • 保持 HTTP 服务和 Web Console 正常运行

不应该让整个 Node 进程退出。

临时规避方式

我们本地临时 patch 了 Playwright bundle,让 location 为空时提供 fallback:

  const pageError = {
    error,
    location: location2 || { url: "", lineNumber: 0, columnNumber: 0 },
  };

应用这个 workaround 后,同样的 AI Studio 页面错误仍会记录到日志,但不会再导致 Node 主进程崩溃,Docker 容器也不再反复重启。

  {"browserConnected":true,"status":"ok"}

/v1/models 也恢复 HTTP 200。

可能的修复方向

这个问题可能和 Playwright 1.60.0 的 page error / web error 处理有关。AIStudioToAPI 这边也许可以考虑:

  • pin 到不会触发该问题的 Playwright 版本;
  • 升级到已修复该问题的 Playwright 版本;
  • 或在浏览器 context/page error 处理上增加防御,避免依赖层异常导致主进程退出。

这个 issue 主要想反馈:即使 AI Studio 页面或代理出口有问题,也不应该导致整个容器进入 restart loop。


以上是codex的debug后写的issue。我用人话总结一下,就是浏览器炸了导致容器不断重启。

日志信息(可选)


Activity

  1. bbbugg commented on May 29, 2026

    @bbbugg
    Member

    试一下 ghcr.io/ibuhub/aistudio-to-api:preview-20260529-150935 这个分支试试

  2. bbbugg commented on May 29, 2026

    @bbbugg
    Member

    补充一下目前的定位:这个崩溃更像是 playwright-core@1.60.0 的版本问题。

    从日志里的栈看,崩溃点是:

    /app/node_modules/playwright-core/lib/coreBundle.js:49624
    url: pageError.location.url
    

    我对了一下 playwright-core@1.60.0 的发布包,这一行正好是在处理 Firefox/Camoufox 的 page error 时直接读取 pageError.location.url。当某些 AI Studio 页面错误、代理/地区限制页、网络异常等场景触发 pageerror,但 location 为空时,就会导致 Node 主进程直接抛 TypeError 并退出。

    所以这里的直接原因应该是 Playwright 1.60.0 对 Firefox page error 的空 location 没有做好兼容;DoH/DNS、地区限制或代理异常更像是触发页面错误的外部条件,不是进程崩溃本身的根因。

    fix/185 里把 playwright 固定到 1.59.1,应该就是为了避开这条 1.60.0 的崩溃路径。

  3. github-actions commented on May 30, 2026

    @github-actions

    ✅ 此 Issue 已在版本 v1.3.0 中修复 (通过 PR #190)。
    ✅ This Issue has been fixed in version v1.3.0 (via PR #190).

  4. added
    🧠 ModelModel support or behavior
    🐛 BugSomething isn't working
    and removed
    🧠 ModelModel support or behavior
    on May 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 BugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions