【问题标题】:Can't connect to Cassandra Docker container from my Node.js app无法从我的 Node.js 应用程序连接到 Cassandra Docker 容器
【发布时间】:2017-12-20 19:32:18
【问题描述】:

我通过运行以下命令来设置 Cassandra 容器:

这将从 docker hub 拉取 cassandra docker 镜像并使用 cassandra 启动一个容器

docker run --name cassandraDb -d --publish-all=true cassandra:3.11

我可以通过运行以下命令来查看它:

docker images
docker ps -a
docker exec -i -t cassandraDb sh -c 'nodetool status'

这是我的 Node.js 路由的代码,当我点击它时,我得到了继续错误:

res.send(client.connect()
        .then(() => {
            console.log('Connected');
            console.log(Object.keys(client.metadata.keyspaces));
            return client.shutdown();
        })
        /* tslint:disable-next-line */
        .catch((err): any => {
            console.error('There was an error when connecting', err);
            return client.shutdown();
        }));

错误:

There was an error when connecting { [Error: All host(s) tried for query failed. First host tried, 172.17.0.2:9042: Error: Connection timeout. See innerErrors.]
  innerErrors:
   { '172.17.0.2:9042':
      { [Error: Connection timeout]
        message: 'Connection timeout',
        info: 'Cassandra Driver Error' } },
  info: 'Represents an error when a query cannot be performed because no host is available or could be reached by the driver.',
  message: 'All host(s) tried for query failed. First host tried, 172.17.0.2:9042: Error: Connection timeout. See innerErrors.' }

我对 Cassandra 或 Docker 没有太多经验,所以我不确定为什么我的应用没有连接到数据库,可能是端口未对传入请求开放,但我不知道如何我会检查或更改它。

【问题讨论】:

    标签: node.js docker cassandra cassandra-3.0


    【解决方案1】:

    我在这里看到两个问题:

    1) documentation 说 --publish-all=true|false .. 是一个总括操作,它在映像的 Dockerfile 或 --expose 命令行标志中使用 EXPOSE 行标识每个端口,并将其映射到主机端口 在临时端口范围内的某个地方。

    而不是--publish-all,它将映射到随机端口,执行docker run --name cassandraDb -d -p 7199:7199 -p 7000:7000 -p 9042:9042 -p 9160:9160 -p7001:7001 cassandra:3.11。可以看到docker ps输出的区别:

    $ docker run --name cassandraDb -d -p 7199:7199 -p 7000:7000 -p 9042:9042 -p 
       9160:9160 -p7001:7001 cassandra:3.11 
    $ docker ps
      ... PORTS   
          0.0.0.0:7000-7001->7000-7001/tcp, 0.0.0.0:7199->7199/tcp, 
          0.0.0.0:9042->9042/tcp, 0.0.0.0:9160->9160/tcp   cassandraDb
    
    $ docker run --name cassandraDb -d --publish-all=true cassandra:3.11 
    $ docker ps
    ... PORTS                                                                                                                         
        0.0.0.0:32782->7000/tcp, 0.0.0.0:32781->7001/tcp, 
        0.0.0.0:32780->7199/tcp, 0.0.0.0:32779->9042/tcp, 0.0.0.0:32778->9160/tcp 
    

    2) Docker ip 可能不是 172.17.0.2。要么是localhost,要么试试docker-machine ip

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 2017-10-05
      • 1970-01-01
      • 2019-05-24
      • 2017-04-11
      • 2020-12-23
      • 2019-07-30
      • 1970-01-01
      • 2021-04-22
      相关资源
      最近更新 更多