在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.name
和bootstrap.servers
设置为ifconfig docker0
返回的IP地址(在你的情况下可能不是docker0,但你明白了)。
另外,你也许可以用--net=host
运行你的容器,但是我认为你最好正确的configuration广告的主机名。