Skip to content

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

@syazyz

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。我用人话总结一下,就是浏览器炸了导致容器不断重启。

日志信息(可选)


Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 BugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions