我有一个在端口 5000 上的 docker 容器中运行的 rest 服务,用于通过 docker 容器运行的 kafka 主题生成消息。
我已使用以下属性配置我的生产者客户端:-
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.
谁能指出实际问题出在哪里?
最佳答案
在现实生活中,advertised.host.name
永远不应该是 localhost
。
在您的情况下,您在桥接网络模式下运行 Docker 容器,因此它将无法通过 localhost
访问代理,因为它将指向容器网络,而不是主机机器。
要使其正常工作,您应该将 advertised.host.name
和 bootstrap.servers
设置为 ifconfig docker0
返回的 IP 地址(在你的情况下可能不是 docker0 但你明白了)。
或者,您可以使用 --net=host
运行您的容器,但我认为您最好正确配置公布的主机名。
关于java - 无法从在 docker 中运行的服务向 kafka 生成消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38716065/