Невозможно подключиться к Zookeeper на внешнем сервере через докер

В настоящее время я плохо знаком со всеми этими инструментами и прошу вас проявить ко мне терпение.

Я пытаюсь создать конвейер данных, чтобы передать изменения базы данных MySQL брокеру Kafka. Я пытаюсь следовать руководству, которое здесь. Если все контейнеры докеров (загруженные непосредственно из репозиториев debezium) находятся внутри локального компьютера, я могу запустить систему.

Однако, если я помещаю докеры MySQL, Kafka и Zookeeper на другой компьютер в моей локальной сети и пытаюсь подключить его, я получаю следующую ошибку:

docker: Error response from daemon: could not get container for zookeeper: No such container: zookeeper.

Ниже приводится команда, которую я использую для этого:

sudo docker run -it --rm --name connect \
    -p 8083:8083 \
    -e GROUP_ID=1 \
    -e CONFIG_STORAGE_TOPIC=my_connect_configs \
    -e OFFSET_STORAGE_TOPIC=my_connect_offsets \
    -e ADVERTISED_HOST_NAME=192.168.31.214 \
    -e ADVERTISED_PORT=2181 \
    --link zookeeper:zookeeper \
    --link kafka:kafka \
    --link mysql:mysql \
    debezium/connect:0.8

Две машины могут связываться друг с другом через все задействованные порты (2181 для Zookeeper, 9092 для Kafka и 3306 для MySQL).

Я также попытался указать имя свойства

-e ADVERTISED_PORT=2181

и изменение свойства хоста на

-e ADVERTISED_HOST_NAME=192.168.31.214:2181

и то, и другое не помогло.

Насколько я понимаю, есть свойство для привязки отдельных ссылок к портам на машине, но я не могу найти указанное свойство. Пожалуйста, дайте мне знать, где я ошибаюсь.


person Shubham Pandey    schedule 08.08.2018    source источник


Ответы (1)


Я не думаю, что -e ADVERTISED_PORT=2181 имеет смысл для контейнера Debezium. Это порт Zookeeper, который работает в другом месте, а не внутри Debezium. Точно так же для объявленного имени хоста это свойство сервера Kafka, которое не загружается контейнером Debezium (и оно также не должно использовать порт 2181).

Если Zookeeper и другие находятся на другом компьютере, --link работать не будет. В этом руководстве предполагается, что все работает на одной машине.

Если вы используете Docker Swarm, вам необходимо настроить и использовать «оверлейную сеть».

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

person OneCricketeer    schedule 09.08.2018
comment
Привет, спасибо за ответ. В таком случае, каким будет способ решения проблемы докером, если я не могу использовать ссылку? Я не использую Docker Swarm, разберусь - person Shubham Pandey; 09.08.2018
comment
Как я уже упоминал, опция оверлейной сети, которую Swarm (или Kubernetes) может настроить для вас. - person OneCricketeer; 09.08.2018