Связь между двумя образами докеров - PullRequest
0 голосов
/ 23 января 2019

У меня есть изображение докера для свечи с именем spark-docker и официальное изображение докера Кассандры cassandra.Я хочу запустить искровое задание из spark-docker, которое будет записывать данные в кассандре.

Dockerfile для spark-docker выглядит следующим образом:

FROM bde2020/spark-python-template:2.4.0-hadoop2.7

MAINTAINER Rafiul

RUN pip install --upgrade pip
RUN pip install pyspark cassandra-driver

Я используюследующая команда для этого.

docker run -ti --network=dockers_default spark-dcoker:latest /spark/bin/spark-submit --conf spark.cassandra.connection.host=cassandra  --packages datastax:spark-cassandra-connector:2.4.0-s_2.11 /app/data_extractor.py -f /app/dataset.tar

Это извлечет данные из dataset.tar и сохранит их в Кассандре.

Но я получаю следующую ошибку

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")})

В моем коде Python я сделал это:

from cassandra.cluster import Cluster


class CassandraSchemaGenerator:
    def __init__(self, keyspace):
        self.keyspace = keyspace
        self.cluster = Cluster()
        self.cluster_conn = self.cluster.connect()

Как я могу получить IP-адрес и номер порта, на котором работает cassandra, и вставить его в мой код Python, чтобы он мог подключиться кCassandra

1 Ответ

0 голосов
/ 23 января 2019

Вы не можете использовать 127.0.0.1 для соединения из одного контейнера в другой, если вы не используете network=host.

Итак, вы делаете одно из следующих действий:

Переключитесь на network=host режим при запуске контейнеров (в этом режиме не требуется указывать порт)

Или (лучше) объединить оба контейнера в вашей сети и использовать имена контейнеров в качестве имен хостов для соединения между ними:

docker network create foo
docker run --network=foo -d  --name=cassy cassandra
docker run --network=foo -ti --name=spark spark-docker:latest ...

Примечание name аргумент - это позволяет контейнерам иметь удобочитаемые имена.Теперь с spark вы можете подключиться к cassandra, используя имя хоста cassy вместо ip

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