У меня есть приложение nodejs, упакованное в контейнер linux, в котором используется библиотека узлов kafka.
Kafka запускается на хост-компьютере, который запускает windows с:
- Порт Zookeeper: 2181
- Порт брокера Kafka: 9092
Я запускаю контейнер nodejs с помощью следующей команды:
docker container run --network host --name nm name:1.0
In Чтобы соединиться с кафкой хоста, я использую следующую команду:
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'
}
Может кто-нибудь посоветовать, что я делаю неправильно?
ОБНОВЛЕНИЕ
При переключении на linux хост-машина, приведенная выше методология localhost работает нормально.