Задача следующая: Напишите сервер node.js, который будет работать с ScyllaDB, который будет размещен в контейнере Docker. Я делал это раньше, но в Ubuntu, и все работает нормально, теперь я должен сделать это в Windows 10.
Я установил Docker Toolbox для Windows и запускал команды из документации 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"
})
Как я уже сказал, он отлично работает в Ubuntu с этим IP-адресом — 127.0.0.1, BeaverDB (GUI) подключается к этому IP-адресу с портом 9042 по умолчанию, но в Windows это не работает. Сейчас нет возможности работать на Ubuntu.
Извините за плохой вопрос и может немного информации, но я новичок в этом и просто не знаю, что именно мне нужно рассказать
Да, должен быть в контейнере Docker
настроить Scylla для использования адреса прослушивания 127.0.0.1 docker run --name some-scylla -d scylladb/scylla --listen-address 127.0.0.1
Я уже пытался это сделать, не помогает





127.0.0.1 — это петлевой адрес, поэтому ваш контейнер Node.js продолжает пинговать себя, а не хост (ваш ноутбук). Вы можете создать свою собственную мостовую сеть и подключить два контейнера к этой мостовой сети.
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 будет разрешаться в любой IP-адрес, который контейнер some-scylla использует в данный момент.
Теперь, когда вы запускаете свой сервер Node.js, обязательно передайте флаг --net=scylla-net, иначе он не сможет разрешить имя some-scylla. Надеюсь это поможет!
Но мне это не помогает, если я хочу, например, запустить DBeaver из Windows и подключиться к scylla
Если вы хотите предоставить scylla для соединений за пределами мостовой сети, вы можете открыть порты контейнера, выполнив docker run -p <HOST PORT>:<CONTAINER PORT> --name some-scylla -d --net=scylla-net scylladb/scylla
Должен ли сервер Node.js также находиться в контейнере Docker?