我是MongoDB的新手。我正在尝试在Ubuntu 13.0 LTS上安装MongoDb 3.0,这是Windows 7主机上的VM。我已经成功安装了MongoDB(包等),但是当我执行命令sudo service mongod start
时,我在“/var/log/mongodb/mongod.log”日志文件中收到以下错误。任何人都可以帮我理解这个错误。互联网上没有与此相关的内容。
2015-04-23T00:12:00.876-0400我控制*****服务器重启***** 2015-04-23T00:12:00.931-0400 E NETWORK [initandlisten]无法取消链接套接字文件/tmp/mongodb-27017.sock错误:1不允许操作 2015-04-23T00:12:00.931-0400 I - [initandlisten]致命断言28578 2015-04-23T00:12:00.931-0400 I - [initandlisten]
答案 0 :(得分:127)
我已经通过删除mongodb-27017.sock
文件自行解决了这个问题。删除此文件后我运行了该服务,运行正常。但是,我仍然不确定问题的根本原因。命令ls - lat /tmp/mongodb-27017.sock
的输出现在是
srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock
答案 1 :(得分:24)
替代KurioZ7提供的答案,您只需将.sock文件的权限设置为当前用户:
sudo chown `whoami` /tmp/mongodb-27017.sock
如果我想在没有sudo的情况下运行mongod,这对我有用。如果我像KurioZ7s一样删除文件,我将在下次重新启动机器时遇到同样的错误。
答案 2 :(得分:10)
使用命令
时会发生此问题mongod
使用命令之前
sudo service mongod start
要解决此问题,请执行以下操作:
为文件设置适当的权限:
/tmp/mongodb-27017.sock
OR
删除文件
/tmp/mongodb-27017.sock
运行
sudo service mongod start && mongod
答案 3 :(得分:9)
最可能的原因是mongod进程在某个时刻由root用户启动。因此,套接字文件(/tmp/mongodb-27017.sock)由root用户拥有。 mongod进程通常在其自己的专用用户下运行,该用户没有删除该文件的权限。
正如您已经发现的那样,解决方案是将其删除。然后mongodb能够使用正确的权限重新创建它。只要使用init脚本启动mongodb,或者在正确的用户帐户下,这应该在重启后保留。
答案 4 :(得分:4)
$ sudo mongod
它解决了我的问题
答案 5 :(得分:2)
对于基于UNIX的操作系统,作为Bastronaut提供的答案的替代方法,您还可以指定.sock文件保存到mongod具有完全用户权限的文件夹(对应于您运行mongod的方式) ),那样mongod也可以在关机时删除.sock文件。保存.sock文件的默认文件夹是“/ tmp”。要指定另一个文件夹,请使用自定义mongodb配置文件,例如'mongodb.conf',并将以下内容添加到其中:
net:
unixDomainSocket:
pathPrefix: "anotherFolder"
之后,您可以使用以下命令运行mongod:
$ mongod --config /path/to/mongodb.conf
您可以阅读以下文档:https://docs.mongodb.org/manual/reference/configuration-options/#net.unixDomainSocket.pathPrefix
答案 6 :(得分:0)
更改/ tmp目录中的所有权mongodb-27017.sock文件,然后再次启动mongod。
cd /tmp
sudo chown mongodb:mongodb mongodb-27017.sock
sudo systemctl start mongod
答案 7 :(得分:0)
重启后手动重启mongod服务可以解决此问题。
长期解决方案是添加静态主机名,而不是mongod.conf文件的IP地址“ net”部分(我怀疑问题是IP地址尚未提供给服务器,当mongod servis启动时。)
答案 8 :(得分:0)
如果您在使用 docker 时遇到此问题,请参阅此问题: