Skip to content

[Bug] Docker/远程面板:提供商的本地登录页绑在容器 127.0.0.1:随机端口,浏览器一律 ERR_CONNECTION_REFUSED(AStudio 实测) #536

Open

Description

@cirnoice9

版本号

3.4.2(官方镜像 aimodcc/agent2api:3.4.2,Docker / Linux 服务端形态)

哪一家 / 哪个地区版本

讯飞 AStudio(astudio,国内版)实测复现。

同类机制预计还涉及把登录页/回调服务绑在 loopback 的其它家:CodeArts、CatPaw、Antigravity、Kiro、Accio、Trae OAuth。

同一时间,这一家的官方客户端能正常用吗?

能,官方网页版一切正常,纯网关侧可达性问题。

你做了什么,看到什么

  1. 容器部署,ports 只映射 3065:3065,面板用 http://192.168.50.47:3065 远程访问。
  2. 账号页 → 添加账号 → AStudio → 「手机号 / 账号密码登录(OAuth)」→ 点「登录并添加」。
  3. 弹出新标签页:http://127.0.0.1:37826/?t=<token> → 浏览器报 ERR_CONNECTION_REFUSED。
无法访问此网站
127.0.0.1 拒绝了我们的连接请求。
ERR_CONNECTION_REFUSED

定位过程(同一个容器里现场取的):

  • 容器 /proc/net/tcp 的 LISTEN 记录:

    端口 本地地址 含义
    3065 00000000 全网卡,浏览器可达
    37826 0100007F 127.0.0.1,仅容器自身可达
  • 在容器内直接访问这个地址是正常的:

    curl -s -i "http://127.0.0.1:37826/?t=<token>"
    HTTP/1.1 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 10200
    <title>AStudio 登录</title>  ← 手机号验证码 / 账号密码 两个 tab,含滑块
    

    不带 t 时返回 403 登录页凭证不正确,符合预期。

  • 这个页面是自包含表单,凭证 POST 给插件自己的 /api/*?t=(见页内 fetch('/api/' + path + '?t=' + TOKEN)),不是 302 跳上游登录页 —— 所以「把上游地址拎出来单独打开」这条绕路也不成立,页面必须在浏览器里打开。

一句话:登录页服务绑在容器的回环地址上,而浏览器运行在用户机器上,127.0.0.1 指的是用户自己的电脑,因此必然连不上。这不是防火墙或代理问题,改 hosts 也没用。

其它补充

为什么这次特别碍事

  • 端口是每次随机分配的(这次 37826,下次不同),用户没法自己 docker -p 固定映射。
  • 容器里没有 socat / nc / python3,NAS 宿主也没有 socat / nsenter,用户侧做端口中继的成本极高。

影响面

  • 凡「登录页或回调服务绑 loopback」的流程,在 Docker / 远程面板下一律不可用。
  • 对照组:OfficeAce、Tabbit 这类轮询型(不弹本地页)能正常添加成功 —— 这正好可以区分是「上游问题」还是「本地页可达性问题」。

与已有 issue 的关系(不是重复)

建议(改动量从小到大)

  • A(推荐):把登录页挂到网关同源,例如 GET /api/session/login/page/{provider}?t=<token>,由网关反向代理到插件的本地监听。3065 已经是发布端口,容器零配置,面板可以直接打开或内嵌 iframe,t 的校验逻辑原样保留。
  • B:插件监听 0.0.0.0 + 面板按 location.origin 生成链接。需要固定端口段并让用户映射,改动大、还得改文档。
  • C(临时缓解):在这个弹窗里把「粘贴 modelBearerToken (API)」做成显式引导(现在有这个 tab,但没有任何提示说明「容器部署请用这个」)。

我现在的绕过方式

用弹窗里的「粘贴 modelBearerToken (API)」tab 加账号,可用;但容器部署下「滑块 / 账号密码登录」实际上等于不存在。

Activity

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions