HBase + TestContainers - переназначение портов - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь использовать Test Containers для запуска интеграционного теста с HBase, запущенного в Docker-контейнере. Проблема, с которой я сталкиваюсь, может быть немного уникальной для того, как клиент взаимодействует с HBase.

Когда HBase Master запускается в контейнере, он сохраняет свой порт hostname: port в Zookeeper, чтобы клиенты могли его найти. В этом случае он хранит «localhost: 16000».

В моем тестовом примере, работающем вне контейнера, клиент получает «localhost: 16000» из Zookeeper и не может подключиться. Сбой соединения, потому что TestContainers переназначил порт на другой случайный порт, отличный от 16000.

Есть идеи, как это преодолеть?

(1) Одна из идей состоит в том, чтобы найти способ сказать HBase-клиенту использовать переназначенный порт, игнорируя значение, полученное из Zookeeper, но мне еще предстоит найти способ сделать это.

(2) Если бы я мог заставить HBase Master написать внешне доступный порт host: в Zookeeper, который также решит проблему. Но я не верю, что сам контейнер знает о том, как Test Containers выполняет переназначение портов.

(3) Возможно, существует другое решение, которое Тестовые контейнеры предусматривает для такого рода ситуации?

1 Ответ

1 голос
/ 03 мая 2019

Вы можете взглянуть на реализацию KafkaContainer , где мы сначала запускаем контейнер Socat (быстрый tcp-прокси), чтобы получить полуслучайный порт, а затем использовать его для настройки целевого контейнера.

Алгоритм таков:

  1. В doStart сначала запустите Socat, нацелив сетевой псевдоним и порт исходного контейнера, например, 12345
  2. Получить подключенный порт (это будет что-то вроде32109, указывающий на 12345)
  3. Заставить исходный контейнер (например, с переменными среды) использовать сопоставленный порт в дополнение к исходному или, если можно настроить только один порт, см. CouchbaseContainer для более продвинутой опции
  4. Верните хост и порт Socat клиенту
...