除非设置为0.0.0.0,否则MongoDB bind_ip将不起作用

ban*_*eng 31 mongodb

我真的尝试过,甚至重新安装MongoDB.

并且它与MongoDB bind_ip错误相同:bind()失败错误:99无法为套接字分配请求的地址

如果将bind_ip设置为:0.0.0.0或127.0.0.1,则它可以工作

$ sudo service mongod start
mongod start/running, process 30040
$ sudo service mongod restart
mongod stop/waiting
mongod start/running, process 29704
$ mongo --port 19708
MongoDB shell version: 3.0.3
connecting to: 127.0.0.1:19708/test
>
Run Code Online (Sandbox Code Playgroud)

如果设置bing_ip为:它将无法工作:127.0.0.1,192.118.96.10,42.112.36.110

$ sudo service mongod start
mongod start/running, process 29969
$ sudo service mongod restart
stop: Unknown instance:
mongod start/running, process 29766
$ mongo --port 19708
MongoDB shell version: 3.0.3
connecting to: 127.0.0.1:19708/test
2015-06-17T06:32:34.625+0000 W NETWORK  Failed to connect to 127.0.0.1:19708
reason: errno:111 Connection refused
2015-06-17T06:32:34.627+0000 E QUERY
Error: couldn't connect to server   127.0.0.1:19708 (127.0.0.1), connection attempt failed
at connect (src/mongo/shell/mongo.js:181:14)
at (connect):1:6 at src/mongo/shell/mongo.js:181
exception: connect failed
Run Code Online (Sandbox Code Playgroud)

地点:

$ which mongod
/usr/bin/mongod
$ which mongo
/usr/bin/mongo
Run Code Online (Sandbox Code Playgroud)

/etc/mongod.conf中的配置

dbpath=/var/lib/mongodb

logpath=/var/log/mongodb/mongod.log

logappend=true

port = 19708

# ips, eg:
# private ip for mongodb server: 192.118.96.10
# public ip for remote app server: 42.112.36.110

bind_ip = 127.0.0.1,192.118.96.10,42.112.36.110

auth = true
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Mar*_*erg 33

编辑:我不知道我阉了根本不对我的回答,或者如果行为bind_ip改变了,但它可以绑定到多个不同的IP地址

bind_ip:127.0.0.1,10.0.0.1,8.8.8.8
Run Code Online (Sandbox Code Playgroud)

因此,最有可能的是,mongod分配给绑定的IP地址之一在相关机器上不存在.


您只能绑定mongod到一个IP,并且0.0.0.0是"侦听所有可用网络接口"的别名.

所以要么使用

bind_ip=127.0.0.1
Run Code Online (Sandbox Code Playgroud)

听循环接口

bind_ip=<someIP>
Run Code Online (Sandbox Code Playgroud)

只收听那个IP 或者

bind_ip=0.0.0.0
Run Code Online (Sandbox Code Playgroud)

收听系统上所有可用的IP.

如果您需要收听几个特定的​​IP,很可能是您的系统设计被搞砸了.

  • 接受来自0.0.0.0的连接通常是一个错误的想法 (2认同)

Ami*_*bey 13

我只是因为这个愚蠢的错误而遇到了同样的问题.

有评论的线和空间问题.

我做错了什么

# network interfaces
net:
  port: 27017
 #bindIp: 127.0.0.1
bindIp: privateIp
Run Code Online (Sandbox Code Playgroud)

代替

net:
  port: 27017
  bindIp: 10.1.2.4
Run Code Online (Sandbox Code Playgroud)

绑定到倍数ips

bindIp: [127.0.0.1,10.128.0.2]
Run Code Online (Sandbox Code Playgroud)

希望这个答案对某人有帮助.


小智 6

我花了好几个小时来解决这个问题。最终,查看日志并在谷歌上搜索我发现的内容让我找到了某个地方(当我在谷歌上搜索“mongo bindIp multipl”(等)时得到的只是一堆像这样的页面,其中的答案没有帮助)。首先, /etc/mongod.conf 中对我有用的块是:

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.16.1.2
Run Code Online (Sandbox Code Playgroud)

没有空格,没有引号,没有括号...但即使正确地重新启动 mongodb 也会出现错误,然后它拒绝启动。我花了几个小时尝试各种其他不正确的配置(这令人沮丧,因为这条线的正确性并没有真正解决问题,而且我不知道还有另一个)。

我可以通过删除 mongodb 套接字文件来解决这个问题:

rm /etc/mongodb-27017.sock 
Run Code Online (Sandbox Code Playgroud)

此后,运行

systemctl restart mongod
Run Code Online (Sandbox Code Playgroud)

工作没有错误。有趣的是(真正令人沮丧的部分原因)是,在试验和错误过程中,如果我将bindIP设置回127.0.0.1并重新启动mongod,它就会起作用,这让我认为该行没问题,问题是使用我正在尝试的替代条目/语法。(我最好的猜测是套接字文件中的某些内容引用了 ips?我不熟悉该编码元素。)

删除套接字后,我可以像这样进入 mongo(启用身份验证所需的选项):

mongo -u admin -p password --authenticationDatabase "admin")
Run Code Online (Sandbox Code Playgroud)

这表明 127.0.0.1 可以工作,并且可以从我的远程应用程序进行连接(在我当前的场景中,我正在设置的 nodebb 测试实例)。


Joh*_*oli 5

Mongo 3.6.2社区

对我来说,解决方案是编辑/etc/mongod.conf的部分

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.1.240   # No brackets, No spaces, only comma separated

#security
Run Code Online (Sandbox Code Playgroud)

然后保存并执行以下操作以重新启动并验证服务:

> service mongod restart
> service mongod status
Run Code Online (Sandbox Code Playgroud)

这里没有失败,现在请确认有人正在监听:

> netstat -a |grep :27017

tcp   0   0  yourhostname:27017   0.0.0.0:*     LISTEN
tcp   0   0  localhost:27017      0.0.0.0:*     LISTEN
Run Code Online (Sandbox Code Playgroud)

现在,使用您喜欢的Mongo工具或命令行进行连接。

/etc/mongod.conf中不同格式的一些结果

  • 逗号和空格导致仅第一个IP被绑定。
  • 仅空格分隔符导致仅第一个IP被绑定
  • []环绕声导致无法启动mongod


小智 5

就我而言,上述选项均无效。最终对我有用的规范是:

bind_ip= [<IP_one> <IP_two>]

Run Code Online (Sandbox Code Playgroud)

一个例子可以是:

bind_ip= [127.0.0.1 10.0.0.4]

Run Code Online (Sandbox Code Playgroud)

(注意两个方向之间没有逗号)

我在 Ubuntu 16.4.5 (LTS) 上有 MongoDB 2.6.10