在docker中运行的服务不能产生消息给kafka

我有一个rest服务运行在端口5000上的docker容器中,用于通过docker容器运行的kafka主题产生消息。

我已经使用以下属性configuration了我的生产者客户端:

bootstrap.servers=localhost:9093 

我已经开始我的包含以下命令:

 docker run -d -p 127.0.0.1:5000:5000 <contained id> 

我也做了下面的configuration宣传kafka主机和端口

 advertised.host.name=localhost advertised.port=9093 

尽pipe当我尝试产生一个kafka话题时,所有的configuration,然后我得到以下错误: –

 org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms. 

有人可以指出实际的问题在哪里?

在现实生活中, advertised.host.name不应该是localhost

在你的情况下,你运行在网桥模式下的Docker容器,所以它不能通过localhost到达代理,因为它将指向容器networking,而不是主机。

为了使它工作,你应该将advertised.host.namebootstrap.servers设置为ifconfig docker0返回的IP地址(在你的情况下可能不是docker0,但你明白了)。

另外,你也许可以用--net=host运行你的容器,但是我认为你最好正确的configuration广告的主机名。