Docker容器中的Python KafkaConsumer在localhost上找不到代理

时间:2018-04-05 14:23:47

标签: python docker apache-kafka

我的目标如下:

我想要一个在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指南进行测试,并通过向主题发布消息进行测试。

我正在使用:

  • Python版本3.6.3
  • Kafka版本2.11-1.0.1
  • Docker 18.03.0-ce
  • Ubuntu 17.10 artful

更新

我没有尝试使用一些基本的网络工具从我的容器中访问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.我从来没有设置任何过滤器,所以我很乐意获得设置/取消设置的帮助。

非常感谢任何想法!感谢。

1 个答案:

答案 0 :(得分:0)

正如Yuankun建议看看kafkas config/server.properties的听众解决了这个问题。我将以下行添加到server.properties。

listeners=PLAINTEXT://172.17.0.1:9092

现在我的kafka服务器可以通过python脚本从docker容器内部访问。