【问题标题】:Unable to connect to Zookeeper on external server via docker无法通过 docker 连接到外部服务器上的 Zookeeper
【发布时间】:2019-01-16 01:36:36
【问题描述】:

我目前是所有这些工具的新手,请您多多包涵。

我正在尝试创建一个数据管道以将 MySQL 数据库的更改推送到 Kafka 代理。我正在松散地尝试遵循教程here。如果所有 docker 容器(直接从 debezium repos 下载)都位于本地机器内,我可以让系统运行。

但是,如果我将 MySQL、Kafka 和 Zookeeper docker 放在本地网络上的另一台机器上并尝试连接它,我会收到以下错误:

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

两台机器可以通过所涉及的所有端口相互通信(Zookeeper 为 2181,Kafka 为 9092,MySQL 为 3306)。

我也尝试过提供属性名称

-e ADVERTISED_PORT=2181

并将主机属性修改为

-e ADVERTISED_HOST_NAME=192.168.31.214:2181

两者都没有帮助。

据我了解,有一些属性可以将单个链接绑定到机器上的端口,但我找不到该属性。请让我知道我哪里出了问题。

【问题讨论】:

    标签: docker apache-kafka apache-zookeeper confluent-platform debezium


    【解决方案1】:

    我不认为-e ADVERTISED_PORT=2181 对 Debezium 容器有意义。那是一个 Zookeeper 端口,它在其他地方运行,而不是在 Debezium 内部。同样,对于广告主机名,这是一个 Kafka 服务器属性,没有被 Debezium 容器加载(也不应该使用端口 2181)

    如果 Zookeeper 和其他人在另一台机器上,那么 --link 将不起作用。该教程假设一切都在一台机器上运行

    如果您使用 Docker Swarm,则需要设置和使用“覆盖网络”。

    否则,您需要将您的 Debezium 配置指向另一台机器的外部 IP 地址。但是,这不是解决问题的“Docker 方式”,因为您不必知道您的容器在哪些主机上运行。

    【讨论】:

    • 您好,谢谢您的回复。在那种情况下,解决问题的码头工人方式是什么,因为我不能使用链接?我没有使用 Docker Swarm,将研究它
    • 正如我提到的,覆盖网络选项,这是 Swarm(或 Kubernetes)可以为您设置的。
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2020-11-14
    • 2017-10-07
    相关资源
    最近更新 更多