Как использовать образ confluent / cp-kafka в докере с рекламой на локальном хосте и именем моего сетевого контейнера kafka? - PullRequest
0 голосов
/ 01 мая 2018

Как использовать образ confluent / cp-kafka в docker compose с экспозицией на localhost и имени моего сетевого контейнера kafka?

Не связывайте это как дубликат:

  1. Подключение к контейнеру Docker Kafka с локального хоста и другого контейнера Docker
  2. Невозможно создать сообщение для kafka из службы, запущенной в Docker

Это не решает мою проблему, потому что методы, которые они используют, не поддерживаются confluent / cp-kafka, и я хочу подключиться на локальный хост и в сеть докеров.

В скрипте configure на confluent / cp-kafka они выполняют эту надоедливую задачу:

# By default, LISTENERS is derived from ADVERTISED_LISTENERS by replacing
# hosts with 0.0.0.0. This is good default as it ensures that the broker
# process listens on all ports.
if [[ -z "${KAFKA_LISTENERS-}" ]]
then
  export KAFKA_LISTENERS
  KAFKA_LISTENERS=$(cub listeners "$KAFKA_ADVERTISED_LISTENERS")
fi

Он всегда устанавливает все, что я даю KAFKA_ADVERTISED_LISTENERS, в 0.0.0.0! Используя сеть докеров, делаем

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9093,PLAINTEXT://kafka:9093

Я ожидаю, что слушатели будут localhost:9092 или 0.0.0.0:9092 и некоторые ip докера PLAINTEXT://172.17.0.1:9093 (что бы ни разрешал kafka в сети докера)

В настоящее время я могу заставить работать только одного или другого. Таким образом, используя localhost, он работает только в хост-системе, никакие док-контейнеры не могут получить к нему доступ. Используя kafka, он работает только в сети докеров, никакие хост-приложения не могут получить к нему доступ. Я хочу, чтобы это работало с обоими. Я использую docker compose, чтобы я мог запустить zookeeper, kafka, redis и мое приложение. У меня есть другие приложения, которые будут запускаться без докера.

Обновление Поэтому, когда я устанавливаю PLAINTEXT://localhost:9092, я могу получить доступ к запущенному докеру kafka вне докера.

Когда я установил PLAINTEXT://kafka:9092, я не могу получить доступ к запущенному докеру kafka, вне докера.

Ожидается, однако, при этом: PLAINTEXT://localhost:9092,PLAINTEXT://kafka:9093 Я ожидал бы получить доступ к запущенному докеру kafka, как внутри, так и снаружи докера. Изображение слияния / cp-kafka стирает localhost и kafka. Установка их обоих на 0.0.0.0, затем выдает ошибку, что я установил 2 разных порта на один и тот же ip ...

Может быть, я просто сталкиваюсь с каким-то самоуверенным изображением докера и должен искать другое изображение ...

1 Ответ

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

Может быть, я просто сталкиваюсь с каким-то самоуверенным изображением докера и должен искать другое изображение ...

Изображение в порядке. Возможно, вы захотите прочитать это объяснение слушателей .

tl; dr - вы не хотите (и не должны?) Использовать один и тот же «протокол» слушателя в разных сетях.

Используйте advertised.listeners, не нужно редактировать listeners

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092

Когда PLAINTEXT://localhost:9093 загружается внутри контейнера, вам нужно добавить сопоставления портов для 9093, что само собой разумеется, и вы подключаетесь к localhost:9093, и это должно работать.

Тогда, если у вас также есть PLAINTEXT://kafka:9092, это будет работать только в сетевом оверлее Docker Compose, а не внешне для ваших DNS-серверов, потому что именно так работает сеть Docker. Вы должны иметь возможность запускать другие приложения в составе этой сети Docker с флагом --network или контейнеров ссылок, используя Docker Compose

Имейте в виду, что если вы работаете на Mac, рекомендуемый способ (в соответствии с Confluent docs) - запускать эти контейнеры в Docker Machine, в виртуальной машине, где вы можете правильно управлять отображениями внешних портов, используя --net=host флаг Докера. Однако, используя блог выше, все это отлично работает на Mac вне виртуальной машины.

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