Docker-Windows上容器的IP地址

时间:2019-03-18 18:02:22

标签: node.js docker docker-compose boot2docker scylla

任务如下: 编写将与ScyllaDB一起使用的node.js服务器,该服务器将放置在Docker容器上。 我早些时候做过,但是在Ubuntu上运行良好,现在我应该在Windows 10上做。

我安装了适用于Windows的Docker Toolbox,并从scylladb文档运行命令。

$ 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"
})

正如我所说的,它在具有此IP-127.0.0.1的Ubuntu上运行良好,默认情况下,BeaverDB(GUI)使用9042端口连接到该IP,但在Windows上不起作用。现在无法在Ubuntu上运行。

很抱歉遇到这个问题,也许还会提供一些信息,但是我对此并不陌生,根本不知道我该告诉什么。

1 个答案:

答案 0 :(得分:0)

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(ScylaDB容器的名称)。用户定义的桥接网络的妙处在于,它们允许您的容器通过其名称相互通信。因此,名称some-scylla可以解析为some-scylla容器当时使用的IP地址。

现在,当您运行Node.js服务器时,请确保传递--net=scylla-net标志,否则它将无法解析名称some-scylla。希望这会有所帮助!