Javascript Can';t通过Nodejs连接到Docker内部的Tarantool容器

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

我想使用以下代码连接到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 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