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能正常响应,说明问题出在Node.js SDK层面;若curl也卡住,需排查Docker端口映射或网络配置。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"}}' - 检查异步调用上下文:确保包含
db.connect的函数被标记为async,且调用该函数时使用了await,避免因未等待异步操作完成导致程序逻辑异常。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

