news 2026/9/11 4:44:42

Open Notebook 浏览器提示 “Cannot connect to server“ 怎么排查?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Open Notebook 浏览器提示 “Cannot connect to server“ 怎么排查?

Open Notebook 浏览器提示 "Cannot connect to server" 怎么排查?

【免费下载链接】open-notebookAn Open Source implementation of Notebook LM with more flexibility and features项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook

用 Docker Compose 部署的 Open Notebook 打开http://localhost:8502时,浏览器弹出错误页提示 "Cannot connect to server" 或 "Unable to reach API",页面能加载但无法创建 Notebook、无法操作界面。项目文档把这种情况归因为前端(Next.js,8502 端口)连不上 API(FastAPI,5055 端口),这是 Open Notebook 最常见的连接类故障(见 Connection Issues)。本文按文档给出的诊断命令和修复分支,给出一条从“服务是否在跑”到“API_URL 是否匹配”的连续排查路径,适用于标准的docker compose单容器部署,以及配置了反向代理或从其他机器远程访问的部署。

确认你看到的是同一类故障

connection-issues.md 列出的 "Cannot connect to server" 典型现象是:

  • 浏览器显示错误页;
  • 提示 "Unable to reach API" 或 "Cannot connect to server";
  • UI 能加载,但无法创建 Notebook 等需要调用 API 的操作。

如果你的现象是浏览器控制台里的 CORS 报错(Cross-Origin Request BlockedAccess-Control-Allow-Origin)或502 Bad Gateway,那属于同一文档中的独立分支(分别由前端与 API 的 URL 不匹配、反向代理连不到 API 引起),修复动作不一样,本文最后会给出指向。先按下面这条主线走。

第一步:在服务端确认服务和端口

文档给出的最短诊断路径是(摘自 Quick Fixes 第 1 条):

# 1. 确认 API 是否在运行 docker ps | grep api # 2. 确认 5055 端口能响应 curl http://localhost:5055/health # 3. 不通过就重启所有服务 docker compose restart # 4. 重新打开浏览器访问 # http://localhost:8502

执行时要注意两点:

  1. 服务名取决于你的 compose 布局。仓库根目录的 docker-compose.yml 只定义surrealdbopen_notebook两个服务,标准部署下docker ps | grep api是匹配不到东西的,应改用docker compose ps确认所有服务显示为 "Up"。docker ps | grep api适用于 reverse-proxy.md 中 frontend/api 拆分的多容器布局,那种布局里才存在名为api的服务。
  2. health 接口的返回内容。文档对curl http://localhost:5055/health的期望输出写得不一致:connection-issues.md 和 quick-fixes.md 写的是{"status":"ok"},而 docker-compose 安装文档 写的是{"status": "healthy"},与源码中实际返回一致——见 api/main.py 中的 health 端点:
@app.get("/health") async def health(): return {"status": "healthy"}

因此判断标准是:命令返回一个包含status字段的 JSON 就算 API 可达;如果 curl 直接连接失败(拒绝连接、超时),说明 5055 端口根本没暴露或 API 没在运行,进入下面的分支。

第二步:按检查结果走对应修复分支

分支 A:API 没在运行或刚启动还没就绪

Quick Fixes 的解法就是docker compose restart,然后重新打开http://localhost:8502。docker-compose 安装文档 的 Troubleshooting 部分还提示:首次运行时服务可能需要 20–30 秒才能起来,刚执行完docker compose up -d就访问报这个错时,先等一等再查。用日志确认 API 是否真正启动、有没有报错:

# 标准两服务布局(surrealdb + open_notebook) docker compose logs open_notebook | tail -30 # 文档中对多容器布局给出的等价命令 docker compose logs api | tail -30

如果docker compose ps显示服务压根不在运行,直接启动:

docker compose up -d

分支 B:端口没有暴露

docker compose ps的端口列应能看到0.0.0.0:5055->5055/tcp(以及 8502 的映射)。如果看不到,检查 compose 文件里open_notebook服务的ports是否包含"5055:5055",仓库默认文件里是有的:

ports: - "8502:8502" # Web UI - "5055:5055" # REST API

缺失时补上"5055:5055",然后重启。注意docker compose down会停止并移除容器(不带-v./notebook_data./surreal_data数据卷内容不受影响,只有docker compose down -v才会删除数据):

docker compose down docker compose up -d

分支 C:API_URL 与前端地址不匹配

connection-issues.md 给出的对应命令:

# 查看当前 .env 里的 API_URL cat .env | grep API_URL

文档中的匹配示例:前端地址是http://localhost:8502时,API_URL应为http://localhost:5055。改错时修正.env中的API_URL并重启。另外可以用容器内视角确认运行时实际生效的值:

docker exec open-notebook env | grep API_URL

关于API_URL的选取,reverse-proxy.md 说明前端按三级优先级确定 API 地址:运行时环境变量API_URL(最高优先级)> 构建期NEXT_PUBLIC_API_URL> 从请求头自动推断(用host头构造{protocol}://{hostname}:5055,并遵循X-Forwarded-Proto)。自动推断在反向代理等复杂拓扑下可能失败,所以文档建议:

  • 配置了反向代理时,显式设置API_URL为公网 URL,且用https://
  • API_URL末尾不要带/api,系统会自动补上;
  • 前端是 HTTPS 时API_URL不能是http://,否则会出现混合内容/CORS 报错。

分支 D:从其他机器访问时被防火墙挡住

如果你是在局域网或远程机器上访问,文档的 "Different Machine / Remote Access" 一节给出流程:

# 1. 在服务器上查 IP hostname -I # 或 ifconfig | grep "inet " # 2. .env 或 compose 中把 API_URL 指向服务器 IP # API_URL=http://192.168.1.100:5055 # 修改后 docker compose restart # 3. 客户端浏览器访问 http://192.168.1.100:8502

验证端口与防火墙时,需要在服务器和客户端分别执行;ufw命令需要 root 权限:

# 服务器上确认端口在监听 netstat -tlnp | grep 5055 # 客户端确认能连通 telnet 192.168.1.100 5055 # 服务器防火墙放行(需要 sudo) sudo ufw allow 8502 sudo ufw allow 5055

第三步:用浏览器控制台看前端实际请求的地址

修复API_URL类问题时,最直接的证据在浏览器里。按 reverse-proxy.md 的 "How to Debug Configuration Issues":

  1. 打开 F12 控制台,找以🔧 [Config]开头的日志,它会显示前端最终使用哪个 API URL;
  2. 文档示例(原文示例输出,不是固定预期):
# 正常: ✅ [Config] Runtime API URL from server: https://your-domain.com # 异常: ❌ [Config] Failed to fetch runtime config ⚠️ [Config] Using auto-detected URL: http://localhost:5055

第二条异常输出的含义是:运行时配置没取到,前端回退到自动推断。如果你是通过 IP 或域名访问、而推断结果落到了localhost:5055,浏览器自然连不上——显式设置API_URL就是解法。

前端错误页本身(ConnectionGuard 触发)也会显示它尝试访问的 URL({当前页面 origin}/api/config),可以和服务端检查结果互相印证。

验证修复结果

按文档的 "Testing Connection" 清单逐项过一遍即可:

# 1. 服务都在跑 docker compose ps # 2. 端口在监听 netstat -tlnp | grep -E "8502|5055" # 3. API 有响应(返回含 status 字段的 JSON,见上文两种文档示例) curl http://localhost:5055/health # 4. 前端页面可达 curl http://localhost:8502 | head

全部通过后,重新打开http://localhost:8502:界面正常显示、可以创建 Notebook,即视为修复完成。前端错误页上也有 Retry 按钮(按R键同样触发重新检测),重启服务后可以先点它而不必刷新整页。

相关但不同的现象,别混进本流程

connection-issues.md 里以下故障与 "Cannot connect to server" 相邻但处理路径不同,遇到时转到对应分支:

  • Connection refused/ECONNREFUSED/socket hang up:API 端口没开、API 崩溃或 IP 写错。按文档顺序:查docker ps、查端口(lsof -i :5055)、查日志(docker compose logs api | tail -30找 error)、重启 API。
  • 502 Bad Gateway(反向代理):代理连不到后端。在代理所在机器curl http://localhost:5055/health验证后端,并核对 nginx 配置——常见错误是proxy_pass漏掉/api路径;HTTPS 场景记得设API_URL=https://yourdomain.com
  • CORS 报错:前端与 API 的 URL 或协议不匹配,核对API_URL的协议(http/https)与前端实际访问地址一致后docker compose restart frontend(多容器布局)。
  • 间歇性断开:文档建议开启重试(SURREAL_COMMANDS_RETRY_ENABLED=true.env变量)并降低并发(SURREAL_COMMANDS_MAX_TASKS=2),这类调整会改变整体行为,不属于本次连接失败的默认动作。

排查完仍无法定位时,docker compose logs的完整输出、docker compose restart后的表现,以及你当前的部署方式(单容器/多容器/反向代理),是 Troubleshooting Index 建议的下一步求助材料。

【免费下载链接】open-notebookAn Open Source implementation of Notebook LM with more flexibility and features项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 4:41:34

PMP认证90天高效备考策略与资源指南

1. 项目概述 作为一名经历过PMP认证全过程的项目管理从业者,我深知3900元的考试费对大多数人来说都不是小数目。2026年6月这场考试,可能是你职业发展的重要转折点,也可能是钱包里飞走的3900元——区别就在于备考策略是否科学有效。 我见过太…

作者头像 李华
网站建设 2026/9/11 4:40:46

基于OpenCV与LBPH的机器学习人脸识别期末项目实践指南

简介:这是一套基于机器学习的人脸识别系统Python源码及配套报告文档,主要面向需要完成期末大作业或课程设计的高校学生,也适合Python初学者参考进阶。项目功能完善、界面友好,含详尽代码注释与设计报告,下载后简单部署…

作者头像 李华
网站建设 2026/9/11 4:40:05

免费把浏览器登录态共享给 AI 助手:ego-lite 完整入门

免费把浏览器登录态共享给 AI 助手:ego-lite 完整入门 【免费下载链接】ego-lite The fastest browser for AI agents to run browser automation, built for sharing your logged-in browser state with your AI agents, like Codex or Claude Code, without distu…

作者头像 李华
网站建设 2026/9/11 4:36:41

GEO与AI搜索优化:2026数字营销技术革命

1. 项目概述:当GEO遇上AI搜索优化的技术革命2026年的数字营销领域正在经历一场静悄悄的革命——GEO(地理定位优化)技术已经从单纯的本地SEO进阶为结合人工智能的智能位置服务系统。最近三个月,全球头部营销工具Semrush的流量数据显…

作者头像 李华
网站建设 2026/9/11 4:34:50

FFmpeg流复制详解:视频批量无损裁剪的原理与实战脚本

简介:需要批量裁剪视频片头片尾的个人创作者、自媒体运营者或办公人员,常因逐条导入剪辑软件、等待重新编码而耗费大量时间;这套无需重新编码的批量处理工具,可直接对音视频流精确剪切,一次处理数十甚至上千个文件。资…

作者头像 李华