任务如下:编写将与ScyllaDB一起使用的node.js服务器,该服务器将放置在Docker容器上。我之前做过这个,但在Ubuntu上,它的工作正常,现在我应该在Windows 10上做。
我安装了Docker Toolbox for Windows并从scylladb docs运行命令。
$ docker run --name some-scylla -d scylladb/scylla
af51fa65627303db16a3de85003be8a165a64f37cf6ae29c0b4e887d64342ad2\
$ docker exec -it some-scylla cqlsh
Connected to at 172.17.0.2:9042.
[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh> CREATE KEYSPACE nodeTask WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
在我的Node.js服务器上,我可以设置连接:
const cassandra = require("cassandra-driver")
const client = new cassandra.Client({
contactPoints: ["127.0.0.1"],
localDataCenter: "datacenter1",
keyspace: "nodetask"
})
正如我所说,它在Ubuntu上使用此IP-127.0.0.1正常工作,BeaverDB(GUI)默认使用9042端口连接到此IP,但在Windows上它不起作用。现在不可能在Ubuntu上工作。
对不起的问题和一些信息感到抱歉,但我是新手,根本不知道到底需要说些什么
127.0.0.1
是环回地址,因此您的Node.js容器会自行ping自己而不是主机(您的笔记本电脑)。您可以创建自己的桥接网络并将两个容器连接到该桥接网络
docker network create scylla-net
现在运行ScyllaDB容器,如下所示
docker run --name some-scylla -d --net=scylla-net scylladb/scylla
在Node.js脚本中,将127.0.0.1
更改为some-scylla
(ScyllaDB容器的名称)。用户定义的桥接网络的一个很酷的事情是它们让你的容器通过它们的名字相互通信。因此,名称some-scylla
将解析为some-scylla
容器当时使用的任何IP地址。
现在当你运行你的Node.js服务器时,一定要传递--net=scylla-net
标志,否则它将无法解析名称some-scylla
。希望这可以帮助!