Подключение контейнера Cassandra с использованием другого контейнера - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь подключиться к контейнеру Cassandra и вставить данные в базу данных с помощью другого контейнера, созданного мной.Я запускаю контейнер Cassandra с помощью

docker pull Cassandra
docker run --name some-cassandra -p 9042:9042 -d cassandra:latest"

Вот код, который я пытаюсь подключить к Cassandra в своей программе на python.

cluster = Cluster(contact_points=['127.0.0.1'],port=9042)
session = cluster.connect()

Если я непосредственно запускаю программу на моем Mac, она подключается, но если я встраиваю его в контейнер, он возвращает ошибку:

raise NoHostAvailable("Unable to connect to any servers", errors)
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'127.0.0.1': ConnectionRefusedError(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})

Я строю и запускаю свой контейнер с помощью

docker build --tag=restful .
docker run -p 4000:80 restful

Я новичок в докере, и я брожу по тому, чтоправильный способ позволить этим двум контейнерам соединяться и общаться?

1 Ответ

0 голосов
/ 26 февраля 2019

Контейнеры Docker предназначены для изоляции друг от друга и хост-машины.

База данных Cassandra работает на порту 9042 внутри контейнера, а также на хост-компьютере.Аргумент -p 9042:9042 указывает Docker связать внутренний порт 9042 с портом хоста 9042. Вот почему при запуске скрипта python с хоста (не внутри какого-либо контейнера) 127.0.0.1:9042 соединяется с вашим контейнером.

Когда вы помещаете один и тот же скрипт Python в отдельный контейнер, IP-адрес 127.0.0.1 больше не указывает на хост-компьютер, а указывает на текущий контейнер.Ваш скрипт Python не может подключиться к контейнеру Cassandra просто потому, что они изолированы друг от друга.

Существует два возможных решения:

  1. Создать сеть с помощью docker create network test_net.Затем свяжите оба ваших контейнера с этой сетью, добавив аргумент --network=test_net в команду docker run.Наконец, обновите скрипт Python, заменив 127.0.0.1 именем контейнера Cassandra some-cassandra.

  2. (Не рекомендуется). Запустите контейнер скриптов Python, привязанный к сети хоста, * 1026.* так что 127.0.0.1 теперь указывает на хост-сеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...