yee*_*lan 41 remote-access virtual-machine mongodb
我是设置服务器环境和mongoDB的新手.这可能听起来很简单,但是,我真的需要你的帮助.
我正在尝试连接到我的虚拟机,该虚拟机从本地机器运行mongodb实例,我相信当我在一个单独的远程服务器上运行时,它应该类似于生产环境.
环境如下:
虚拟机的专用IP:192.168.184.155
本地计算机和虚拟机的公共IP:96.88.169.145
我改变了bind_ip在/etc/mongod.conf文件从
bind_ip = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
至
bind_ip = 127.0.0.1,192.168.184.155,96.88.169.145
Run Code Online (Sandbox Code Playgroud)
重新启动mongod服务后,虚拟机和本地计算机都无法通过mongodb命令访问mongodb并给我以下错误.
MongoDB shell version: 3.0.1
connecting to: test
2015-03-17T16:02:22.705-0400 W NETWORK Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2015-03-17T16:02:22.707-0400 E QUERY Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
at connect (src/mongo/shell/mongo.js:179:14)
at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed
Run Code Online (Sandbox Code Playgroud)
但是,如果我改变了
bind_ip = 192.168.184.155
Run Code Online (Sandbox Code Playgroud)
并重新启动服务,它工作,我可以使用本地计算机上的mongo访问.它似乎不适用于多个IP地址.我试着在mongodb文档中查找,但是,他们确实提到bind_ip采用逗号分隔的列表,这让我很困惑.
感谢您的帮助.
Joe*_*eng 53
用逗号分隔的带有括号的Ips包含在mongo 3.2.7中,对我来说:
bindIp = [127.0.0.1, 192.168.184.155, 96.88.169.145]
Run Code Online (Sandbox Code Playgroud)
pun*_*yal 20
你可以这样做:
bindIp: [172.31.60.184,127.0.0.1]
Run Code Online (Sandbox Code Playgroud)
记得不要在逗号后加空格.
默认的 /etc/mongod.conf 文件包含以下网络接口条目:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
这对应于--bind-ip arg
命令行上的参数。请注意破折号符号已转换为驼峰式大小写。要将虚拟机中运行的数据库公开给主机,最简单的方法是将数据库绑定到所有接口以进行测试。这将涵盖虚拟机使用 NAT 接口或桥接接口的情况。命令行参数是--bind_ip_all
没有参数的,它的存在与bindIPAll: true
配置文件中的参数相对应。因此,配置文件应改为:
# network interfaces
net:
port: 27017
bindIpAll: true
Run Code Online (Sandbox Code Playgroud)
请注意,该bindIp
参数已被删除。
还应该注意的是,可以将参数添加到命令行来覆盖配置文件中的参数。通常,mongod 是使用该--config /etc/mongod.conf
参数运行的。更改配置文件更容易,而不是寻找将其作为守护进程运行的脚本并重新systemd
加载和使用它。
有关配置文件的 YAML 性与命令行参数的详细信息,请参阅当前文档:https://docs.mongodb.com/manual/reference/configuration-options/
如果您在使用 NAT 的虚拟机上运行 mongod,默认端口27017
将不会暴露给主机。需要将主机上的端口映射到来宾虚拟机中的该端口。这超出了本答案的范围,但一些研究将提供一种用于您正在使用的虚拟机软件(VirtualBox、VMware 等)的方法
就我而言,使用 mongoDB 4.4.6,以下解决方案有效 -
net:
port: 27017
bindIp: 127.0.0.1;<private_host_ip>
Run Code Online (Sandbox Code Playgroud)
进行更改后,使用以下命令重新启动 mongoDB -
sudo systemctl restart mongod
Run Code Online (Sandbox Code Playgroud)
要检查 mongoDB 状态,请运行 -
sudo systemctl status mongod
Run Code Online (Sandbox Code Playgroud)
小智 6
使用以下版本的MongoDB:MongoDB Shell版本v3.6.10
重现问题: 使用[127.0.0.1,xxx.xxx.xxx.xxx]时,出现以下错误。标量选项“ net.bindIp”必须为单个值,请尝试使用“ mongod --help”以获取更多信息
分析
这是因为,根据MongoDB文档:https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIP
net.bindIP的类型为“ 字符串 ”。
绑定多个IP地址的解决方案
bindIp: "127.0.0.1,xxx.xxx.xxx.xxx"
Run Code Online (Sandbox Code Playgroud)
注意:逗号后不能有空格
MongoDB 6.0.1
bindIp: 127.0.0.1;192.168.1.0
Run Code Online (Sandbox Code Playgroud)
更改后只需重新启动 mongodb 服务器:
sudo systemctl restart mongod
Run Code Online (Sandbox Code Playgroud)
感谢@wdberkeley 和@anhlc 提出了线索。
我查看了/var/log/mongodb/mongod.log下的日志文件。它显示了问题的失败原因。
2015-03-17T16:08:17.274-0400 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1, 192.168.184.155" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2015-03-17T16:08:17.332-0400 I NETWORK [initandlisten] getaddrinfo(" 192.168.184.155") failed: Name or service not known
Run Code Online (Sandbox Code Playgroud)
所以 mongo.conf 文件对空间很敏感,这是我碰巧添加的,应该已经注意到了。同样正如 @anhlc 指出的那样,96.88.169.145 不是虚拟机的有效 IP 地址。因此,这也导致了错误。
非常感谢你们的帮助!如果有人碰巧遇到同样的问题,希望这可以有所帮助。
归档时间: |
|
查看次数: |
62552 次 |
最近记录: |