Javascript Can';t通过Nodejs连接到Docker内部的Tarantool容器
我想使用以下代码连接到tarantool cotainer:Javascript Can';t通过Nodejs连接到Docker内部的Tarantool容器,javascript,node.js,docker,tarantool,Javascript,Node.js,Docker,Tarantool,我想使用以下代码连接到tarantool cotainer: import TarantoolConnection from 'tarantool-driver' let connection = new TarantoolConnection('192.168.99.100:3301'); connection.ping().then((res) => { console.log(res); }); 在此之前,我开始使用容器: docker run -p 3301:3301 -d
import TarantoolConnection from 'tarantool-driver'
let connection = new TarantoolConnection('192.168.99.100:3301');
connection.ping().then((res) => {
console.log(res);
});
在此之前,我开始使用容器:
docker run -p 3301:3301 -d tarantool/tarantool:1.6
但结果我一无所获
如果我尝试为此空间创建空间或\和索引:
connection.eval("box.schema.space.create('myspace', {if_not_exists=true, temporary=true})").then((res) => {
console.log(res);
});
我得到这个错误:
未处理的PromisejectionWarning:未处理的承诺
拒绝(拒绝id:1):错误:此套接字已关闭
或:
未处理的PromisejectionWarning:未处理的承诺
拒绝(拒绝id:2):错误:连接将被破坏或
已经销毁,创建另一个
正如我从错误中看到的,所需的套接字已经关闭,但我不明白为什么
tarantool驱动程序的版本:
如何修复它?这里有两个问题:
localhost:3301
而不是192.168.99.100:3301
connection.ping()或connection.eval()之前使用connection.connect()
const TarantoolConnection = require('tarantool-driver');
let connection = new TarantoolConnection({port: 3301});
connection.connect().then((res) => {
console.log("Connected: " + res);
connection.ping().then((res) => {
console.log("Pong: " + res);
});
connection.eval("box.schema.space.create('myspace', {if_not_exists=true, temporary=true})").then((res) => {
console.log("Space created");
});
});
为了以防万一,我使用了以下命令来启动tarantool docker实例:
$ docker run --rm -p 3301:3301 -t -i tarantool/tarantool:1.6
不幸的是,我仍然有相同的错误:UnhandledPromisejectionWarning:UnhandledPromiseRejection(拒绝id:1):错误:connect-EconRefuse127.0.0.1:3301。其他容器工作正常,我可以连接到它们,这很奇怪。看起来tarantool驱动程序无法连接到tarantool docker容器。在运行tarantool容器时,您能否尝试在另一个shell窗口中使用
telnet localhost 3301
连接到它,并告诉我结果?这真的很奇怪,因为我甚至无法使用telnet连接。我得到错误:无法使用端口3301打开与主机的连接:连接错误,但当我尝试连接uisng docker ip 192.168.99.100时,它成功连接(可以这样称呼它,因为我收到类似Tarantool 1.6.9(二进制)和奇怪的符号序列的消息)嗯,上面的消息是正确的,这表明你可以连接到塔兰托。将上面代码的第三行{port:3301}
更改为{host:'192.168.99.100',port:3301}
,然后运行它。它应该会起作用。另一个问题是为什么端口映射到localhost不起作用。也许你的docker设置有问题。你能解释一下你的操作系统和docker配置吗?
$ docker run --rm -p 3301:3301 -t -i tarantool/tarantool:1.6