Docker - IP-адрес контейнера в Windows - PullRequest
0 голосов
/ 18 марта 2019

Задача следующая: Напишите сервер 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.

Извините за плохой вопрос и, возможно, немного информации, но я новичок в этом и просто не знаю, что именно мне нужно сказать

1 Ответ

0 голосов
/ 18 марта 2019

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.Надеюсь, это поможет!

...