无法连接MongoDB。

23

我刚刚安装了MongoDB(标准Ubuntu构建版本,而不是最新稳定版),但出现连接问题:

Mon Feb  6 03:11:22 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:79
exception: connect failed

现在我的机器不是127.x.x.1,而是某种原因下的x.x.x.2(尽管我已经更改了配置文件以绑定到该地址,并尝试绑定到我的公共IP,但没有成功。

配置:

#mongodb.conf

# Where to store the data.

# Note: if you run mongodb as a non-root user (recommended) you may
# need to create and set permissions for this directory manually,
# e.g., if the parent directory isn't mutable by the mongodb user.
dbpath=/var/lib/mongodb

#where to log
logpath=/var/log/mongodb/mongodb.log

logappend=true

bind_ip = 199.21.114.XX
port = 27017

我已经检查了日志,只显示启动信息。

我还检查了守护进程是否在运行,而且确实在运行——我甚至尝试手动使用 --fork 运行它。

有人遇到过这种情况吗?或者有什么建议吗?

谢谢。

更新:

重启后,以下是日志:

** WARNING: You are running in OpenVZ. This is known to be broken!!!

Tue Feb  7 19:43:32 [initandlisten] db version v1.8.2, pdfile version 4.5
Tue Feb  7 19:43:32 [initandlisten] git version: nogitversion
Tue Feb  7 19:43:32 [initandlisten] build sys info: Linux allspice 2.6.24-28-se$
Tue Feb  7 19:43:32 [initandlisten] *** warning: spider monkey build without ut$
Tue Feb  7 19:43:32 [initandlisten] waiting for connections on port 27017
Tue Feb  7 19:43:32 [websvr] web admin interface listening on port 28017

我应该补充一下,我确实尝试过连接到mongo 199.21.114.XX:xxxx。 - Stuart.Sklinar
更新 - 使用 Docker 和 Docker-Compose。 - Stuart.Sklinar
10个回答

26
我通过注释掉我 /etc/mongod.conf 文件中以下行的方式解决了这个问题。
# Listen to local interface only. Comment out to listen on all interfaces. 
#bind_ip = 127.0.0.1

您需要在更改配置后重新启动mongod进程。

sudo service mongod restart

在尝试了其他一些答案之后,我才找到了这个可行的解决方案。如果我删除mongod.lock文件或允许在我的IP表中输入和输出端口27017,将来会有负面后果吗? - user137717
1
#bind_ip = 127.0.0.1注释掉将会向任何人/任何地方开放。确保您的防火墙/iptables过滤未经请求的连接和/或在/etc/mongod.conf中添加security: authorization: 'enabled'。否则,任何人/任何地方都可以写入您的数据库。 - rafahoro

16

您需要运行mongo 199.21.114.XX来指定IP(199.21.114.XX)。

否则,如果您想让它同时在本地主机上监听,应从配置文件中删除bind_ip设置。

更新检查您的防火墙配置。由于您正在连接到外部IP,因此可能已配置为即使从本地框也会被阻止。


2
已添加更新以检查您的防火墙配置,因为您说您已经尝试在命令行中指定IP。 - Eve Freeman
2
你确定吗?如果 netstat -a 显示你正在监听 27017 端口,但是无法通过mongo或telnet连接到 27017 端口,那很可能是防火墙的原因。可以使用 sudo iptables -L -n 命令来检查规则。 - Eve Freeman
啊 - 我已经检查过了,它似乎没有在任何端口上监听... 有什么想法吗? - Stuart.Sklinar
好的 - 已完成 - 我已更新问题并附上日志 - 谢谢。 - Stuart.Sklinar
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/7430/discussion-between-stuart-sklinar-and-wes-freeman - Stuart.Sklinar
显示剩余2条评论

11
sudo rm /var/lib/mongodb/mongod.lock

2
同感 -- 或许不是我的生命,但肯定是我一小时的时间 :) - Pyrce
1
这对我有用。之后必须重新启动mongod。sudo service mongodb restart。 - clintsmith
经过漫长的旅程,我最终获得了你的答案。谢谢 :) - khanmizan

5

因为一个愚蠢的错误,我遇到了同样的问题。

首先删除 MongoDB 文件即可解决问题。

rm -rf /tmp/mongodb-27017.sock

我在 /etc/mongod.conf 文件中犯了什么错误?

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

替代

net:
  port: 27017
  bindIp: 10.1.2.4

监听所有可用IP地址

bindIp: [127.0.0.1,10.128.0.2]

重新启动MongoDB

sudo service mongod start

希望这个回答对某些人有所帮助


我认为你的意思是 sudo service mongodb start。而且在逗号后面加上括号或空格对我也没有用。所以我的设置是这样的:bind_ip: 127.0.0.1,192.168.222.222 - Andrew

3
在 /etc/mongod.conf 文件中,我将 bindIp: 127.0.0.1 修改为 bindIp: 0.0.0.0,这样可以监听所有端口。是的,我知道这很冒险,但我在内部网络上运行。

顺便说一句,在 Ubuntu 18 上运行时,注释掉 #bindIp: 127.0.0.1 对我来说没有用。

这在我使用Ubuntu 20上有效。 - XpressGeek
这在我使用Ubuntu 20上有效。 - XpressGeek

2
以下步骤可以帮助您:
  1. 打开终端并运行 "sudo rm /var/lib/mongodb/mongod.lock"
  2. 现在运行 " sudo mongod --repair "
  3. 现在运行 "sudo start mongodb"
  4. 现在只需检查mongodb状态 "sudo status mongodb"

最后只需调用命令 "mongo"


它是“sudo status mongod”。 - Bogdan M.

2
默认情况下,运行mongo控制台命令将在本地主机上查找mongodb,因此使用的是127.0.0.1 IP地址,也就是本地环回地址。同时,mongod的默认配置应该可用于localhost。除非你开启了认证功能,在开始时最好采用这种方式。确保已启用认证功能或数据库正在公共IP上公开运行。
当你想连接到除本地主机或默认配置之外的主机时,请执行以下操作:
mongo <host>

1
我在运行 mongod 时遇到了这个问题,但它还没有正常运行。我猜测可能有更好的方法来等待它在安装后启动,但添加 sleep 10 似乎可以解决问题。
一个稍微不那么原始的方法可能是 tail -f 它的日志文件,并查找它告诉你它正在侦听你指定的接口的事件。
local log=/var/log/mongodb/mongod.log
sudo -u mongodb touch "$log"
service mongod start &
launcher=$!
tail -0f "$log" |
grep -q 'port: 27017'
wait "$launcher"
sleep 1

最后的sleep有点令人绝望;似乎在记录启动后,需要花费一点时间才能完全启动并开始监听。
另请参见Bash shell脚本即使状态为活动也无法连接到MongoDB

0

如果您正在使用Windows,请运行服务,然后检查mongoDB服务器是否正在运行,如果没有运行,请启动它。

mongoDB服务器默认在localhost:27017上运行。 点击localhost:27017首先创建一个管理员用户。


0

另一种方法是添加 mongod 选项参数 bind_ip

mongod -–help

--bind_ip arg 逗号分隔的 IP 地址列表,用于监听 - 默认为 localhost

--bind_ip_all 绑定到所有 IP 地址

mongod --fork --logpath /var/log/mongodb.log --dbpath /data/db --bind_ip 0.0.0.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接