При подключении кассандры, размещенной в контейнере docker, с получением nodejs NoHostAvailableError: ни один хост не может быть разрешен - PullRequest
1 голос
/ 27 мая 2020

Я настроил контейнер Cassandra, выполнив следующие команды: Это вытянет образ Cassandra docker из концентратора docker и запустит контейнер с сетью Cassandra

  1. docker создать cassandra- net
  2. docker run --name my-cassandra --network cassandra- net -d cassandra: latest
  3. docker run --name my- cassandra-1 --network cassandra- net -d -e CASSANDRA_SEEDS = my-cassandra cassandra: latest
  4. docker run -it --rm --network cassandra- net cassandra: latest cql sh my-cassandra

Затем создано пространство ключей

CREATE KEYSPACE user_keyspace WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 3};

В котором есть таблица пользователей.

Мой node.js код:

const cassandra = require('cassandra-driver');
var contactPoints = ['my-cassandra:9042'];
const client = new cassandra.Client({
    contactPoints: contactPoints,
    localDataCenter: 'datacenter1',
    keyspace: 'user_keyspace'
});

client.connect(function (err) {
    if (err) {
        console.log('Error in connnection: ', err); return;
    }
    console.log('Cassandra connected');
});

Произошла ошибка при подключении

NoHostAvailableError: Хост не может быть разрешено в ControlConnection.init (/app/node_modules/cassandra-driver/lib/control-connection.js:203:13) в asyn * 104 0 * Client._connect (/app/node_modules/cassandra-driver/lib/client.js:513:5) {name: 'NoHostAvailableError', info: 'Представляет ошибку, когда запрос не может быть выполнен из-за отсутствия хоста доступны или могут быть достигнуты драйвером. ', сообщение:' Не удалось разрешить ни одного хоста ', innerErrors: {}

У меня нет большого опыта работы с Cassandra или Docker, поэтому я не конечно, почему мое приложение не подключается к БД, возможно, что-то такое, что порты не открыты для входящих запросов, но я не знаю, как это проверить или изменить.

1 Ответ

1 голос
/ 28 мая 2020

Драйвер попытается разрешить имена хостов, используемых в качестве точек контакта. Контактные точки ожидают имя хоста или IP-адрес.

В вашем случае вместо использования my-cassandra, определяемого пользователем сетевого имени, используйте IP-адрес:

const contactPoints = ['127.0.0.1'];

Вкл. при запуске docker вы можете использовать мостовую / хост-сеть или использовать -P или -p 9042:9042:

docker run -it --rm -P cassandra:latest cqlsh my-cassandra
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...