以下内容基于此快速入门指南:http://docs.confluent.io/current/cp-docker-images/docs/quickstart.html
在那里,他们在自己的docker容器中演示了各种kafka / confluent组件,每个组件都以
开头- 净=宿主
标记并通过
访问本地主机:端口
无论我做什么,我都无法从ubuntu服务器本身外部访问它,无论是通过ip还是域,他们声明应该工作,例如为控制中心。 但在同一台主机上,我的ubuntu盒子,一切正常。
知道问题可能在这里吗?已经坚持了好几个小时
答案 0 :(得分:4)
问题是您无法访问端口(即无法使用telnet),或者您无法使服务器正常工作(即服务器没有应答请求)?
有-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092 \
,这是kafka经纪人在初始连接后与客户进行通信的地址(除了本地主机,这显然不会工作......)。您可以使用服务器的IP替换localhost
,它应该可以正常工作。
更具体地说,有listeners
config(默认值0.0.0.0:9092)和advertised.listeners
(默认PLAINTEXT:// locahost:9092)
客户端通过listener
绑定初始化(bootstrap-server或broker-list)上的connexion。完成此初始连接后,代理将返回集群中所有代理的所有advertised.listeners,这是后续交换所使用的内容)
从github repo,confluent为监听器分配广告监听器的值,将主机更改为0.0.0.0(因此可以从远程访问确定) 您不能将0.0.0.0设置为advertised.listeners,但它必须是唯一可访问的接口
答案 1 :(得分:0)
现在回答自己,这是一个非常简单的防火墙/码头工具:
使用UFW(防火墙)和泊坞窗时小心
请参阅http://blog.viktorpetersson.com/post/101707677489/the-dangers-of-ufw-docker
我在端口3000上使用了一个简单的nodeJS hello world示例,只要我使用默认/网桥并发布端口(-p 3000:3000)就可以从外部连接到它。
使用主机网络我根本无法连接。
在这两种情况下,防火墙(ubuntu上的UFW)都没有明确允许端口3000,所以Docker必须在这里做一些隐藏的魔法来重写iptables,而UFW没有注意到允许桥接和发布的端口通过。
=>通过在UFW中明确打开kafka端口来解决