我有一个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服务器绑定到9092,如中所示 nmap -p 9092 localhost
: PORT STATE SERVICE 9092/tcp open XmlIpcRegSvc
我可以通过将docker容器Map到另一个端口 -p XXX:9090
,但是如何让本地kafka服务器在不绑定到新端口的情况下侦听该端口?
1条答案
按热度按时间kyvafyod1#
所以经过一番挖掘,我找到了一些选择(注意:我使用的是mac电脑,因此#2可能不适用于所有人)。
包括
--network=host
在docker run
命令(如图所示)。不要改变主意
docker run
命令,而不是连接到host.docker.internal:9092
容器内部的使用者/发布者代码。如图所示。我无法让#1为我工作(我确信这是用户错误)。但是#2工作得很好,只需要在容器内更改配置。