无法从sam local访问本地MongoDB

无法从sam local访问本地MongoDB,mongodb,docker,aws-sam,Mongodb,Docker,Aws Sam,我有安装MongoDB的Windows 10计算机。我可以从命令行连接它。我使用sam local运行NodeJS应用程序。当我使用生产环境时,应用程序可以访问Mongo Atlas云实例。但当我切换到带有localhost MongoDB的dev环境时,它无法连接 sam命令启动Docker,因此很清楚为什么它无法连接在windows localhost上运行的Mongo。我发现相关问题:。问题是我仍然无法连接本地MongoDB,即使我尝试: "MONGODB_URI": "mongodb:/

我有安装MongoDB的Windows 10计算机。我可以从命令行连接它。我使用
sam local
运行NodeJS应用程序。当我使用生产环境时,应用程序可以访问Mongo Atlas云实例。但当我切换到带有localhost MongoDB的dev环境时,它无法连接

sam
命令启动Docker,因此很清楚为什么它无法连接在windows localhost上运行的Mongo。我发现相关问题:。问题是我仍然无法连接本地MongoDB,即使我尝试:

"MONGODB_URI": "mongodb://docker.for.win.localhost: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]

有人也面对过这个问题并克服了它吗?Mongo直接安装到windows,而不是Docker中。

如果MongoDB是直接从windows安装和运行的,则应该可以通过
localhost:27017
访问它。
mongod
的默认端口为
27017
,如中所述

尝试使用:

"MONGODB_URI": "mongodb://localhost:27017/bud?retryWrites=true&w=majority"
如果您对NodeJS docker容器使用的是
网络\u驱动程序
,而不是默认设置的
网桥
。指

其他情况:
  • 使用
    --shardsvr
    命令行选项或配置文件中
    clusterRole
    设置的
    shardsvr
    值运行时,mongod的默认端口为
    27018

  • 使用
    --configsvr
    命令行选项或配置文件中
    clusterRole
    设置的
    configsvr
    值运行时,mongod的默认端口为
    27019

    • 记住,localhost(或任何名称)只是为了方便您。Tcp堆栈在ip地址上工作。如果您配置dns服务(例如,通过主机文件)将容器的名称解析为127.0.0.1,这并不意味着您的主机,但127.0.0.1始终指向容器


      您可以让mongo服务在您的主ip上侦听,并将其用于docker应用程序,但您也可以利用hyper-v虚拟网卡,设置mongo,以便不仅在主机的环回接口上侦听,而且在虚拟接口上侦听,并为docker应用程序提供该接口的ip。它保留在您的虚拟局域网上,因此不会公开。但是,windows防火墙可能会阻止它,因此请确保将其设置为专用网络(它将被标记为未识别,默认情况下是公用的,通常会阻止内容)。

      Docker在端口27017上运行,事实上,我想我应该先问一下您使用的是哪个版本的Docker。我在Windows 10上使用docker 19.03.5社区版,我的docker容器似乎找到了
      localhost
      。尝试:
      docker-run--rm nginx:alpine sh-c“ping localhost”
      docker-run--rm ubuntu sh-c“apt get update&&apt get install-yq iputils ping&&ping localhost”
      解决方法:连接到网络/Wifi,获取IP地址并将docker修改为指向IP地址是的,这很有效。但我不知道它是如何公开我的实例的,不是吗?docker容器正在运行自己的linux,它覆盖了localhost/127.0.0.1。有必要将URI更改为host.docker.internal并传递正确的端口27017。我想,我错过了这一部分。谢谢你让我知道:)
      "MONGODB_URI": "mongodb://localhost:27017/bud?retryWrites=true&w=majority"