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

时间:2015-06-17 06:41:32

标签: mongodb

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

MongoDB bind_ip error: bind() failed errno:99 Cannot assign requested address for socket

相同

如果将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
>

如果将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

位置:

$ which mongod
/usr/bin/mongod
$ which mongo
/usr/bin/mongo
/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

提前致谢。

14 个答案:

答案 0 :(得分:27)

编辑:我不知道我的回答是错误的还是bind_ip的行为发生了变化,但是 可以绑定多个不同的IP

bind_ip:127.0.0.1,10.0.0.1,8.8.8.8

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

您只能将mongod绑定到一个IP,其中0.0.0.0是&#34的别名;侦听所有可用的网络接口"。

所以要么使用

bind_ip=127.0.0.1

收听环回接口

bind_ip=<someIP>

仅收听该IP

bind_ip=0.0.0.0

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

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

答案 1 :(得分:12)

由于这个愚蠢的错误,我遇到了同样的问题。

有评论的线和空间问题。

我做错了什么

# network interfaces
net:
  port: 27017
 #bindIp: 127.0.0.1
bindIp: privateIp

而不是

net:
  port: 27017
  bindIp: 10.1.2.4

用于绑定到倍数ips

bindIp: [127.0.0.1,10.128.0.2]

希望这个答案对某人有用。

答案 2 :(得分:4)

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

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

> service mongod restart
> service mongod status

此处没有失败,现在确认有人在听:

> netstat -a |grep :27017

tcp   0   0  yourhostname:27017   0.0.0.0:*     LISTEN
tcp   0   0  localhost:27017      0.0.0.0:*     LISTEN

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

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

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

答案 3 :(得分:2)

我花了好几个小时用这个问题撞墙。最后,看着日志和谷歌搜索我发现的东西让我在某处(我在google搜索'mongo bindIp multipl'(等)时得到的是一堆像这样的页面,答案没有帮助)。 首先,/etc/mongod.conf中对我有用的块是:

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,172.16.1.2

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

我能够通过删除mongodb套接字文件解决它:

rm /etc/mongodb-27017.sock 

在此之后,运行

systemctl restart mongod

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

删除套接字后,我就可以像这样shell到mongo(启用身份验证时需要的选项):

mongo -u admin -p password --authenticationDatabase "admin")

确定127.0.0.1可以工作,也可以从我的远程应用程序连接(在我当前的场景中我正在设置的nodebb测试实例)。

答案 4 :(得分:1)

文件说

&#34;您可以连接逗号分隔值列表以将mongod绑定到多个IP地址。&#34;

所以,这不是真的......

答案 5 :(得分:1)

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

bind_ip= [<IP_one> <IP_two>]

一个例子可能是:

bind_ip= [127.0.0.1 10.0.0.4]

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

我在Ubuntu 16.4.5(LTS)上具有MongoDB 2.6.10

答案 6 :(得分:0)

嘿我使用的是MongoDB shell版本:3.2.6。

bindIP = 127.0.0.1,192.168.0.50 
bindIP = [127.0.0.1,192.168.0.50]
bind_ip = 192.168.6.38 

无效,我使用此命令编辑了mongod.conf

sudo -i gedit /etc/mongod.conf file 

并将bind_ip = 0.0.0.0更改为bind_ip = 192.168.6.38它工作正常....

答案 7 :(得分:0)

使用MongoDB 4.0.5: 对我来说,以下工作:

bindIp=[127.0.0.1,11.22.33.44]

然后我打开身份验证:

security:
   authorization: "enabled"

重新启动mongod(在Ubuntu 18.04上)给出了错误:

  

标量选项“ net.bindIp”必须为单个值

因此,我不得不执行bindIp:0.0.0.0。 也许有人知道如何结合bindIp和Security

答案 8 :(得分:0)

这是一种仅适用于Ubuntu的符号:(注意空格,符号)

bind_ip=[127.0.0.1,22.33.44.99,88.77.55.66] 

22.33.44.99-我的服务器静态IP,88.77.55.66-我的笔记本电脑静态IP。这给了我一个从互联网访问mongodb的机会。不要忘记添加一条规则-将端口27017打开到ufw。

答案 9 :(得分:0)

对于那些仍然想知道的人-问题不是语法,而是您输入的地址

为了接收远程客户端连接,您还需要添加服务器公共IP 。因此,您必须添加:

 - localhost
 - 127.0.0.1 // Add both localhost and 127.0.0.1 to ensure local accessibility
 - server_public_ip  // This is important one. Add the public server IP address.
 - remote_client_ip1
 - remote_client_ip2
 - remote_client_ip3 // As many client IPs as you want to grant access to

因此配置应如下所示:

bind_ip=[localhost,127.0.0.1,server_public_ip,remote_client_ip]

我们在其中放置了127.0.0.1和localhost以确保本地可访问性,因为不同的配置只能使用其中一种设置。

注意: bind_ip接受多种语法。如果您有语法错误,mongodb服务将无法运行。您可以使用service mongodb status进行检查。

不要永远不要放置0.0.0.0,因为您可能是每几个月发生一次的常规RANSOME攻击的受害者。 Read about it

答案 10 :(得分:0)

为我在ubuntu 18和mongo --version 4.x.xx上工作:

1-在etc / mongod.conf中-net add

bindIp:“ 127.0.0.1,0.0.0.0”

2-然后使用pm2:

sudo apt-get更新 须藤apt-get pm2

3-启动对mongod的pm2服务

pm2启动mongod

PD:您需要在生产场景中擦除0.0.0.0

答案 11 :(得分:0)

为我在ubuntu 18和mongo --version 4.x.xx上工作:

1-在etc / mongod.conf中-net add

bindIp:“ 127.0.0.1,0.0.0.0”

2-然后使用pm2:

sudo apt-get update 

sudo apt-get pm2

3-启动对mongod的pm2服务

pm2 start mongod

PD:在生产场景中您需要删除0.0.0.0

答案 12 :(得分:0)

让我想到的是,我需要列出可以访问数据库的其他机器的 IP 地址。不是这种情况。您只需要列出运行 mongoDB 的服务器的 IP 地址。对我来说:

bindIp: localhost

致:

bindIp: localhost,127.0.0.1,<actual IP of my server>

然后我可以从我网络中的其他机器访问 MongoDB。我只是没有以正确的方式思考这个问题。把这个贴在这里,以防其他人和我有同样的脑放屁。

答案 13 :(得分:0)

就我而言

操作系统:Windows 8 (MongoDB) 操作系统:Raspbian Linux(客户端)

尝试了所有方法,以下配置对我有用

  1. mongod.conf 文件更新为

    bindIp: 0.0.0.0
    
  2. 在数据库机器窗口中打开防火墙端口,不要跳过这个。

     https://www.windowscentral.com/how-open-port-windows-firewall