docker - 通过多个 Docker 容器监听同一个端口
问题描述
我提出了一个 Kafka 消息服务,其中 Kafka 代理设置在 docker 中并位于端口 9092 上。主机端口 9092 映射到容器端口 9092。现在我正在尝试启动一个侦听主机端口 9092 的消费者来消费消息。在所有代理都使用 docker compose 启动后,我正在尝试设置使用者容器。
我得到的错误,当我尝试启动消费者时,端口 9092 已经分配
请有人帮助我了解我的方法是否正确。如果它是正确的,我能做些什么来解决这个问题
解决方案
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
推荐阅读
- vue.js - Ag-Grid sass/webpack 似乎无法从 node_modules 内部解析相对路径
- sql - 无法解释查询 SQL 的 BASIC 文件
- c++ - 如何使用 Aws::Transfer::Transfermanager 检查下载是否成功?
- reactjs - 如何测试一个已经通过 props 传递的函数
- r - 根据一个因素随机播放数据帧行
- python - 熊猫使用函数突出显示带有条件的excel列
- parallel-processing - 并行:像 pblapply 一样使用 parLapply 时模仿监控
- javascript - 尝试获得平均值时变得不确定
- python - 在 Python 中非阻塞启动并发协程
- javascript - zopim : 添加标题属性