我有一个容器化为使用kafka-node库的linux容器的nodejs应用程序。
Kafka在运行Windows的主机上运行:
我使用以下命令运行nodejs容器:
docker container run --network host --name nm name:1.0
为了连接主机的kafka,我使用以下命令:
client = new kafka.KafkaClient({kafkaHost: "localhost:9092"});
但是抛出:
Error: connect ECONNREFUSED 127.0.0.1:9092
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9092
}
当我将连接命令更改为:
client = new kafka.KafkaClient({kafkaHost: "host.docker.internal:9092"});
我正在:
TimeoutError: Request timed out after 30000ms
at new TimeoutError (/usr/src/app/node_modules/kafka-node/lib/errors/TimeoutError.js:6:9)
at Timeout._onTimeout (/usr/src/app/node_modules/kafka-node/lib/kafkaClient.js:491:14)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7) {
message: 'Request timed out after 30000ms'
}
有人可以告诉我我在做什么错吗?
UPDATE
当切换到Linux主机时,上述localhost方法可以很好地运行。
不是最佳答案,但是切换到Linux主机应该可以使第一种方法(localhost:IP)正常运行。