首页 文章

如何在docker中使用confluent / cp-kafka图像和localhost上的广告以及我的网络容器名称kafka?

提问于
浏览
1

如何在docker中使用confluent / cp-kafka图像,并在localhost和我的网络容器名称kafka上进行曝光?

不要将其作为副本链接:

这些并不能解决我的问题,因为他们使用的方法由confluent / cp-kafka折旧,我想在localhost和docker网络上连接 .

在confluent / cp-kafka的configure脚本中,他们执行了这个烦人的任务:

# 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的任何东西!使用docker网络,做

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

我希望听众是 localhost:90920.0.0.0:9092 和一些docker ip PLAINTEXT://172.17.0.1:9093 (无论kafka解决到docker网络上)

目前我只能使用其中一种工作 . 所以使用localhost,它只适用于主机系统,没有docker容器可以访问它 . 使用kafka,它只能在docker网络中运行,没有主机应用程序可以访问它 . 我想让它与两者合作 . 我正在使用docker compose,以便我可以启动zookeeper,kafka,redis和我的应用程序 . 我有其他应用程序将启动没有docker .

Update 所以当我设置 PLAINTEXT://localhost:9092 时,我可以在docker之外访问kafka运行的docker .

当我设置 PLAINTEXT://kafka:9092 时,我无法在docker之外访问kafka运行的docker .

这是预期的,但是这样做: PLAINTEXT://localhost:9092,PLAINTEXT://kafka:9093 我希望在docker内外访问kafka运行的docker . 汇合/ cp-kafka图像正在消灭 localhostkafka . 将它们都设置为 0.0.0.0 ,然后抛出一个错误,我将2个不同的端口设置为同一个ip ...

也许我只是碰撞一些固定的码头图像,应该寻找不同的图像......

1 回答

  • 1

    也许我只是碰到一些固定的码头图像,应该寻找不同的图像......

    图像很好 . 您可能需要阅读this explanation of the listeners .

    tl;dr - 你不是't want to (and shouldn' t?)在不同的网络中使用相同的监听器"protocol" .

    使用 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网络的工作原理 . 您应该能够使用 --network 标志或link containers using Docker Compose作为Docker网络的一部分运行其他应用程序

    请记住,如果您在Mac上运行,建议的方法(根据Confluent文档)是在Docker Machine中运行这些容器,在VM中,您可以使用Docker的 --net=host 标志正确管理外部端口映射 . 但是,使用上面的博客,它在VM外部的Mac上运行良好 .

相关问题