我的目标如下:
我想要一个在docker容器(在我的本地机器上)内运行的python脚本,以便与在我的本地机器上运行的kafka代理连接。
我的设置:
我在docker镜像中有以下python脚本:
from kafka import KafkaConsumer
consumer=KafkaConsumer('my-topic',bootstrap_servers=['172.17.0.1:9092'])
其中bootstrap_servers=['172.17.0.1:9092']
来自docker0网络接口。
当我尝试运行docker容器时,我收到错误
kafka.errors.NoBrokersAvailable: NoBrokersAvailable
Kafka正常运行并正在侦听端口9092.我按照Kafka的quickstart指南进行测试,并通过向主题发布消息进行测试。
我正在使用:
更新
我没有尝试使用一些基本的网络工具从我的容器中访问localhost。这是我发现的:
ping 172.17.0.1
(没有丢失包裹)在localhost上运行nmap -p 9092 172.17.0.1
会产生以下结果:
Starting Nmap 7.60 ( https://nmap.org ) at 2018-04-06 11:46 CEST
Nmap scan report for arture-VirtualBox (172.17.0.1)
Host is up (0.00016s latency).
PORT STATE SERVICE
9092/tcp open XmlIpcRegSvc
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
在容器中运行nmap -p 9092 172.17.0.1
会产生以下结果:
Starting Nmap 6.47 ( https://nmap.org ) at 2018-04-06 09:46 UTC
Nmap scan report for 172.17.0.1
Host is up (0.000596s latency).
PORT STATE SERVICE
9092/tcp filtered unknown
MAC Adress: my mac address (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
所以问题是有一些过滤器阻止我的docker容器到达端口9092.我从来没有设置任何过滤器,所以我很乐意获得设置/取消设置的帮助。
非常感谢任何想法!感谢。
答案 0 :(得分:0)
正如Yuankun建议看看kafkas config/server.properties
的听众解决了这个问题。我将以下行添加到server.properties。
listeners=PLAINTEXT://172.17.0.1:9092
现在我的kafka服务器可以通过python脚本从docker容器内部访问。