通过多个Docker容器监听同一端口

时间:2019-04-10 16:37:06

标签: docker apache-kafka docker-compose kafka-consumer-api docker-networking

我启动了一个Kafka消息传递服务,该服务在docker中安装了Kafka代理,并且位于端口9092上。主机端口9092映射到容器端口9092。现在,我尝试建立一个监听主机端口的使用者9092使用消息。我正在尝试在所有代理都使用docker compose启动之后设置使用者容器。

我遇到的错误是,当我尝试启动使用者时,端口9092已被分配

请有人帮助我意识到我的方法是否正确。如果正确,我该怎么办才能解决此问题

1 个答案:

答案 0 :(得分:4)

KAFKA_ADVERTISED_LISTENERS必须用localhost:<port>指定为环境变量。

默认情况下,Kafka侦听器将侦听9092端口,并且当生产者/消费者连接到代理时,它将使用host:9092通告代理列表作为元数据请求的一部分。

此处在Docker中运行它,因此代理元数据列表中的主机仅在Docker网络中可访问。

要使其正常工作,我们需要让Kafka代理侦听另一个端口,将其添加到advertised.listeners并添加新端口的端口映射。

ports:
- "29092:29092"
environment: 
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_LISTENERS=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:29092
- KAFKA_ADVERTISED_LISTENERS=EXTERNAL://localhost:29092,INTERNAL://kafka0:9092
- KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT```