Докер - соединение контейнера Cassandra с другим контейнером - PullRequest
0 голосов
/ 29 мая 2018

Привет! :) Я новичок в Docker!Я пытался создать контейнер на основе Cassandra в Ubuntu 16.04 и связать его с другим контейнером на той же машине.Цель состоит в том, чтобы получить доступ к базе данных с помощью драйвера Python Cassandra из второго контейнера.

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

docker run -d --name some-cassandra -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9042:9042 -p 9160:9160 --rm -t cassandra

И связываясь с другим контейнером какНиже:

run --name python-container \
--volume=$HOME/cassandra/output:/output --rm \
--link some-cassandra:cassandra \
-d custom-cassandra:latest

custom-cassandra - это пользовательский образ Docker, который в основном устанавливает Python, pip и cassandra-driver.Затем я подключаюсь ко второму контейнеру, используя:

docker exec -it python-container python

Однако следующий код завершается ошибкой:

from cassandra import ConsistencyLevel, OperationTimedOut, WriteTimeout
from cassandra.cluster import Cluster
from cassandra.query import SimpleStatement
session = Cluster(['localhost']).connect()

с ошибкой:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "cassandra/cluster.py", line 1247, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 1283, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 1270, in cassandra.cluster.Cluster.connect
  File "cassandra/cluster.py", line 2773, in cassandra.cluster.ControlConnection.connect
  File "cassandra/cluster.py", line 2816, in cassandra.cluster.ControlConnection._reconnect_internal
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused"), '::1': error(99, "Tried connecting to [('::1', 9042, 0, 0)]. Last error: Cannot assign requested address")})

Чтонеужели я не так делаю ссылки, пожалуйста?

1 Ответ

0 голосов
/ 30 мая 2018

Используйте вместо localhost имя контейнера (some-cassandra) в скрипте Pyton.localhost внутри контейнера всегда ссылается на сам контейнер, а не на хост-машину.


Кроме того, вместо создания контейнеров один за другим, вы также можете использовать docker-compose для запуска нескольких контейнеров вместе.Здесь ссылка для получения дополнительной информации: https://docs.docker.com/compose/gettingstarted/#step-2-create-a-dockerfile

По сути, вы создаете образ докера с помощью приложения, создаете файл docker-compose и запускаете его.

docker-compose.yml:

version: '3'

services:
  casandra:
    image: cassandra:latest

  myapp:
    image: mypythonapplicaiton
    depends_on:
      - casandra
    environment:
      - CASSANDRA_HOST=cassandra 

(ваше приложение может получить хост cassandra из переменной окружения CASSANDRA_HOST или как вы ее называете)

После этого запустите его с docker-compose up -d.

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