Как установить / создать docker изображений для приложения, которое использует Кафку и Кассандру - PullRequest
0 голосов
/ 04 мая 2020

У меня есть java приложение для весенней загрузки. Это приложение использует Кассандру в качестве хранилища данных и Кафку для обмена сообщениями. Я использую образ для cassandra, zookeeper и kafka локально для их запуска.

Я также создал DockerFile для своего веб-приложения и создаю файл для создания образа.

Мое приложение при запуске , подключитесь к базе данных cassandra.

Когда я запускаю приложение (intelij), оно работает нормально, подключаясь к cassandra (под именем docker), но когда я запускаю образ docker локально для того же приложения, Контейнер образа приложения не может подключиться к cassandra, работающему локально, и, следовательно, дает сбой.

Что мне нужно сделать, чтобы я мог запустить контейнер docker для приложения, а также подключиться к cassandra.

1 Ответ

0 голосов
/ 04 мая 2020

Я не знаю точных данных о вашем соединении (хост: порт), которые вы используете в своем приложении, но наиболее распространенная ошибка в этой ситуации - использование localhost.

localhost в контейнере docker не совпадает с localhost при запуске приложения вне контейнера docker. Поэтому при запуске приложения внутри контейнера docker необходимо указать другое имя хоста для вашего развертывания cassandra.

По умолчанию docker будет использовать идентификатор контейнера в качестве имени хоста контейнера, поэтому вам придется заменить localhost с вашим идентификатором контейнера cassandra или, альтернативно, запустите контейнер cassandra, используя --hostname, чтобы определить имя хоста, которое вы будете использовать sh.

В конце концов, более элегантным решением будет использование docker создать файл, где именем хоста каждой службы является имя службы. Это очень полезно для совместного запуска нескольких служб, которые «общаются» друг с другом.

Здесь вы можете найти все, что я вам объяснил относительно имен узлов контейнеров .

Также здесь вы можете найти хорошее введение в docker compose.

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

В этом примере имена хостов для каждого сервиса: web и redis . Вы можете применить это к вашему составному файлу и использовать соответствующие имена хостов для cassandra и kafka.

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