无法从 docker 中运行的服务向 kafka 生成消息
Posted
技术标签:
【中文标题】无法从 docker 中运行的服务向 kafka 生成消息【英文标题】:Cannot produce message to kafka from service running in docker 【发布时间】:2016-12-07 13:12:19 【问题描述】:我有一个在 docker 容器中运行的 5000 端口的休息服务,它用于通过 kafka 主题在 docker 容器中运行产生消息。
我已经使用以下属性配置了我的生产者客户端:-
bootstrap.servers=localhost:9093
我已经用下面的命令开始了我的收容:-
docker run -d -p 127.0.0.1:5000:5000 <contained id>
我还做了以下配置来宣传 kafka 主机和端口
advertised.host.name=localhost
advertised.port=9093
尽管在我尝试生成 kafka 主题时进行了所有配置,但我收到以下错误:-
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
有人可以指出实际问题出在哪里吗?
【问题讨论】:
【参考方案1】:在现实生活中,advertised.host.name
绝不应该是localhost
。
在您的情况下,您在桥接网络模式下运行 Docker 容器,因此它将无法通过 localhost
访问代理,因为它将指向容器网络,而不是主机。
要使其正常工作,您应该将advertised.host.name
和bootstrap.servers
设置为ifconfig docker0
返回的IP 地址(在您的情况下可能不是docker0,但您明白了)。
或者,您可能会使用--net=host
运行您的容器,但我认为您最好正确配置广告主机名。
【讨论】:
以上是关于无法从 docker 中运行的服务向 kafka 生成消息的主要内容,如果未能解决你的问题,请参考以下文章
Kafka Docker - 无法从 docker 容器外部生产或消费
无法在 kafka connect docker 映像中运行 kafka connect datagen
在 dockerized 环境中无法从 Flask 连接到 Kafka
避免Kafka客户端无法连接Docker上运行的Kafka,又名:Docker如何添加hosts映射