You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker运行的SurrealDB无法被外部Node.js应用连接求助

问题描述

通过以下Docker命令运行SurrealDB:

docker run --rm --pull always --name surrealdb -p 0.0.0.0:8000:8000 surrealdb/surrealdb:latest start --log debug --user root --pass root memory

在Docker外部运行Node.js应用,尝试连接http://127.0.0.1:8000,但程序执行db.connect时卡住,永远无法进入finally块:

try {
        console.log("database connecting")
        const test = await db.connect(`http://${host}:8000/rpc`, {
            versionCheck: true,
            database: "test",
            namespace: "test",
            auth: {
                username: "root",
                password: "root"
            }
        });
        console.log("Connected");
        console.log("Connected!");
        return db;
    } catch (err) {
        console.log("Failed to connect to SurrealDB:", err);
        throw err;
    } finally {
        console.log("db initialized");
    }

已知条件:使用最新版Node.js SDK和Docker镜像,Surrealist客户端可正常连接容器中的数据库。

解决思路
  • 确认host变量取值:直接将连接地址硬编码为http://127.0.0.1:8000/rpc测试,排除host变量为空或错误值导致的连接目标异常。
  • 关闭版本检查:将versionCheck设为false,部分场景下版本检测请求会因网络或版本同步问题挂起,阻塞整个连接流程。
  • 查看容器日志:执行docker logs surrealdb,检查debug日志中是否收到Node.js的连接请求,判断是网络层面无请求到达,还是服务端处理异常。
  • 手动测试RPC接口:用curl发送请求验证接口连通性:
    curl -X POST http://127.0.0.1:8000/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"signin","params":{"user":"root","pass":"root"}}'
    
    若curl能正常响应,说明问题出在Node.js SDK层面;若curl也卡住,需排查Docker端口映射或网络配置。
  • 检查异步调用上下文:确保包含db.connect的函数被标记为async,且调用该函数时使用了await,避免因未等待异步操作完成导致程序逻辑异常。

内容的提问来源于stack exchange,提问作者dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:41:02