#node.js #mongodb #docker
#node.js #mongodb #докер
Вопрос:
У меня есть база данных MongoDB, настроенная на моем хост-сервере, и контейнер docker, работающий на этом хосте с приложением NodeJS. В этом приложении я пытаюсь подключиться к базе данных на хосте, но время ожидания запроса всегда истекает.
Я установил сеть на «хост» и использовал адрес «хост.докер.внутренний». Я также попытался установить mongodb-оболочку, и это действительно работает! Таким образом, в принципе, я могу подключиться к базе данных с помощью оболочки в контейнере, но не с помощью API MongoDB NodeJS.
Код приложения NodeJS:
const mongodb = require('mongodb'); mongodb.MongoClient.connect("mongodb://host.docker.internal:27017/");
использование mongo mongodb://host.docker.internal:27017/
в оболочке работает, и я правильно подключаюсь.
Комментарии:
1. Вы также настроили mongodb для прослушивания этого интерфейса? IIRC-это что-то из сети 172.0.0.0/8, и монго по умолчанию слушает только на локальном хосте.
2. Я так не думаю. Хост-сеть, насколько я понимаю, просто означает, что контейнеры работают так, как они работали бы непосредственно на вашем компьютере. Кроме того, это не должно быть проблемой, потому что он работает с оболочкой, что означает, что он может подключаться из контейнера, верно?
3. В вашем URL-адресе отсутствуют имя пользователя и пароль… «mongodb://user:pass@host.docker.internal:27017/»
4. Это интересно. У меня нет поблизости компьютера mac, чтобы воспроизвести его, но если бы я это сделал, моим первым шагом было бы проверить, что говорит tcpdump/wireshark
5. Чего я никак не могу понять, так это как ты вообще получаешь этот тайм-аут? Ты не пользуешься никаким обратным вызовом? У показанного кода просто нет средств что-то сделать, когда он работает или даже когда он не работает… Откуда вы знаете, что это не работает?
Ответ №1:
Наконец-то я выяснил, в чем проблема. Мне пришлось привязать его к правильным IP-адресам / в моей конфигурации я использовал аргумент --bind_ip_all
.
Большое спасибо за помощь!