Virtualbox 无法连接到数据库:Mongoose/MongoDB,虚拟盒 上下文

Virtualbox 无法连接到数据库:Mongoose/MongoDB,虚拟盒 上下文,virtualbox,Virtualbox,MongoDB数据库运行在Ubuntu虚拟机(VM)上 express服务器应用程序在我的主机(Windows 10)上提供一个目录 此目录与VM共享 问题 我试图在本地启动我的express应用程序,但没有成功 在VM端,通过mongo shell连接到数据库正常工作 在主机端,我刚刚使用npm启动了应用程序 我是否需要执行其他操作,以便我的主机/应用程序可以与VM中的db通信 我试过: 及 …但它不起作用 我得到这个错误: 谢谢你的帮助看来你在这里混合了两件事: 连接到虚拟机上的

MongoDB数据库运行在
Ubuntu
虚拟机(VM)上

express
服务器应用程序在我的主机(Windows 10)上提供一个目录

此目录与VM共享

问题 我试图在本地启动我的
express
应用程序,但没有成功

在VM端,通过mongo shell连接到数据库正常工作

在主机端,我刚刚使用npm启动了应用程序

我是否需要执行其他操作,以便我的主机/应用程序可以与VM中的db通信

我试过:

  • …但它不起作用
我得到这个错误:


谢谢你的帮助

看来你在这里混合了两件事:

  • 连接到虚拟机上的远程数据库主机
  • 在与虚拟机上的本地数据库通信的虚拟机上运行应用程序
根据您的解释,您的设置似乎如下所示:

+-------------------------+                      +------------------------+
|                             |                      |                           |
| Windows 10 host machine  | --  Shared folder -|    Virtual machine      |
|                             |      application   |    MongoDB running      |
|                             |                      |                           |
+-------------------------+                      +------------------------+
  • 在主机上运行
    npm run main
    时,应用程序需要使用虚拟机网络地址连接到远程数据库。与虚拟机共享文件夹时没有到达数据库的报告

  • 在本地计算机上运行
    npm run main
    时,可以使用
    localhost
    或者虚拟机可以是网络地址


您的问题与
npm
mongodb
无关,而是与您的虚拟机连接设置有关

如果应用程序在Windows 10上运行,设置虚拟机网络并连接到数据库的最简单方法是在VirtualBox的VM设置上设置
桥接器adpater

然后,在Ubuntu机器的主网络接口上设置
dhcp
,将为您提供一个地址

编辑
/etc/networking/interfaces
然后使用
sudo/etc/init.d/networking restart重新启动网络

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp0s3
iface enp0s3 inet dhcp
使用提供的
enp0s3
inet地址连接到虚拟机的数据库。要获取指定的地址,请在shell上使用
ip addr

@user7364588

我没有etc/networking/interfaces,但是etc/network/interfaces中只有以下消息:

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown
我还是应该应用你的建议还是使用netplan

在netplan内部,我有一个文件50-cloud-init.yaml,其中包含

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
      dhcp6: false
      optional: true
      nameservers:
        addresses: [4.2.2.1, 4.2.2.2, 208.67.220.220]
ip地址:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:e3:9f:67 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 85581sec preferred_lft 85581sec
    inet6 fe80::a00:27ff:fee3:9f67/64 scope link
       valid_lft forever preferred_lft forever
1:lo:mtu 65536 qdisc noqueue状态未知组默认qlen 1000
链接/环回00:00:00:00:00 brd 00:00:00:00:00:00:00
inet 127.0.0.1/8范围主机lo
永远有效\u lft首选\u lft永远有效
2:eth0:mtu 1500 qdisc fq_codel state UP group default qlen 1000
链接/以太08:00:27:e3:9f:67 brd ff:ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255范围全局动态eth0
有效\u lft 85581sec首选\u lft 85581sec
inet6 fe80::a00:27ff:fee3:9f67/64范围链接
永远有效\u lft首选\u lft永远有效

谢谢您的回答。我还是一个初学者,所以我理解这个概念,但是我不知道怎么做。在VirtualBox的VM设置->网络选项卡->适配器2:我单击了启用网络适配器并选择了“桥接适配器”。默认情况下,我留下了名称:“realtek wireless…”。适配器1(默认情况下)连接到NAT。我不明白这句话:“那么,设置dhcp[…]。使用此地址连接到VM的数据库。”(由于我修改了VM参数,我无法再连接到Internet…。在尝试之前,我只想检查一下。由于评论长度有限,我在“回复消息”中写下了详细信息。看来
netplan
已经在配置网络了。应设置inet ip地址,在shell中使用
ip addr
命令行进行检查。只要您不告诉这个命令结果,就很难说网络是否正确设置。我在尝试桥接时失去了internet连接,所以我必须重新初始化我的计算机。。。安装相同,但问题仍然存在。我只是还没有试着搭桥,因为我不想再次失去我的网络连接。