Невозможно получить доступ к локальному MongoDB от sam local - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть Windows 10 машина, на которой установлена ​​MongoDB. Я могу подключить его из командной строки. Я запускаю приложение NodeJS с sam local. Когда я использую производственную среду, приложение может получить доступ к экземпляру облака Mon go Atlas. Но когда я переключаюсь на среду разработки с локальным хостом MongoDB, он не может подключиться.

Команда sam запускает Docker, поэтому понятно, почему он не может подключиться Mon go, работающий на windows localhost. Я нашел соответствующий вопрос: Изнутри контейнера Docker, как мне подключиться к локальному хосту машины? . Проблема в том, что я все еще не могу подключиться к своей локальной MongoDB, даже если я пытаюсь:

"MONGODB_URI": "mongodb://docker.for.win.localhost:27018/bud?retryWrites=true&w=majority"

или

"MONGODB_URI": "mongodb://host.docker.internal:27018/bud?retryWrites=true&w=majority"

Ошибка:

Request failed { MongoNetworkError: failed to connect to server [docker.for.win.localhost:27018] on first connect [MongoNetworkError: connect ECONNREFUSED 192.168.65.2:27018]

Кто-нибудь сталкивался этот вопрос, а также преодолеть его? Пн go устанавливается непосредственно в windows, а не в Docker.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Помните, что localhost (или любое имя) просто для вашего удобства. Стек Tcp работает на IP-адресах. Если вы сконфигурируете службу dns (например, через файл hosts) для разрешения имени в 127.0.0.1 для контейнера, это не означает ваш хост, но 127.0.0.1 всегда указывает на контейнер.

Вы можете сделать mon * Служба 1004 * для прослушивания вашего основного ip и использования его для приложения docker, но вы также можете использовать виртуальные сетевые карты Hyper-V и настроить mon go для прослушивания не только по интерфейсу обратной связи хоста, но и по виртуальному. и дать docker app ip этого интерфейса. Он остается на вашей виртуальной локальной сети, поэтому он не доступен для публики c. Тем не менее, windows межсетевой экран может заблокировать его, поэтому убедитесь, что вы настроили его как частную сеть (он будет помечен как неопознанный и по умолчанию это publi c, который обычно блокирует содержимое).

0 голосов
/ 02 февраля 2020

Если MongoDB установлен и работает непосредственно с windows, он должен быть доступен через localhost:27017. Порт по умолчанию для mongod - 27017, как описано на странице документации mongoDB .

Попробуйте использовать:

"MONGODB_URI": "mongodb://localhost:27017/bud?retryWrites=true&w=majority"

Если вы используют NETWORKS_DRIVER, отличный от bridge, для вашего контейнера NodeJS docker, который установлен по умолчанию. См. Docker Сетевые драйверы

Другие случаи:

  • Порт по умолчанию для Mongod 27018, когда работает с параметром командной строки --shardsvr или значением shardsvr для параметра clusterRole в файле конфигурации.

  • Порт по умолчанию для mongod: 27019 при работе с параметром командной строки --configsvr или значение configsvr для параметра clusterRole в файле конфигурации.

...