首页 > 解决方案 > 从 Docker 容器中的 localhost Consumer 连接到 localhost Kafka 代理时出现端口绑定错误

问题描述

我有一个 Zookeeper 在端口 2181(默认)上运行,Kafka 服务器在我的本地机器上的端口 9090 上监听。

当我在本地运行 kafka CLI 或本地消费者/生产者应用程序时,连接没有问题。

然后我尝试将 Kafka 消费者捆绑到 Docker 容器中,并在本地运行该 Docker 容器,例如: docker run -p 9092:9092 --rm <DOCKER_IMAGE>

这给出了错误: (Error starting userland proxy: Bind for 0.0.0.0:9090 failed: port is already allocated.)

这是有道理的,因为 Kafka Server 绑定到 9092,如下所示nmap -p 9092 localhost PORT STATE SERVICE 9092/tcp open XmlIpcRegSvc

我可以通过 将 Docker 容器映射到不同的端口-p XXX:9090,但是如何让本地 Kafka 服务器监听该新端口而不绑定到它?

标签: dockernetworkingapache-kafka

解决方案


因此,经过一番挖掘,我找到了一些选择。(注意:我在 Mac 上,所以 #2 可能不适用于所有人)。

  1. 包含--network=hostdocker run命令中(如此处所示
  2. 根本不要更改docker run命令,而是host.docker.internal:9092在容器消费者/发布者代码内连接到代理。如此处所见。

我无法让#1 为我解决问题(我确定这是用户错误)。然而#2 工作得很好,只需要在容器内进行配置更改。


推荐阅读