91

我是 MongoDB 的新手。我正在尝试在 Ubuntu 13.0 LTS 上安装 MongoDb 3.0,它是 Windows 7 主机上的虚拟机。我已经成功安装了 MongoDB(包等),但是当我执行命令时sudo service mongod start,在“/var/log/mongodb/mongod.log”日志文件中出现以下错误。谁能帮我理解这个错误。互联网上没有与此相关的内容。

2015-04-23T00:12:00.876-0400 I CONTROL ***** 服务器已重新启动 ***** 2015-04-23T00:12:00.931-0400 E 网络 [initandlisten] 无法取消链接套接字文件 /tmp/mongodb -27017.sock errno:1 不允许操作 2015-04-23T00:12:00.931-0400 I - [initandlisten] 致命断言 28578 2015-04-23T00:12:00.931-0400 I - [initandlisten]

4

9 回答 9

162

我自己通过删除mongodb-27017.sock文件解决了这个问题。删除此文件后,我运行了该服务,效果很好。但是,我仍然不确定问题的根本原因。该命令的输出ls - lat /tmp/mongodb-27017.sock现在是

srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock
于 2015-08-03T06:56:54.963 回答
50

替代 KurioZ7 提供的答案,您可以简单地将 .sock 文件的权限设置为当前用户:

sudo chown `whoami` /tmp/mongodb-27017.sock

如果我想在没有 sudo 的情况下运行 mongod,这对我有用。如果我像在 KurioZ7s 答案中那样删除文件,下次我重新启动机器时,我只会得到同样的错误。

于 2015-12-15T13:52:00.853 回答
35

使用命令时会出现此问题

mongod

使用命令之前

sudo service mongod start

要解决此问题,请执行以下任一操作:

在文件上设置适当的权限:

/tmp/mongodb-27017.sock

或者

删除文件

/tmp/mongodb-27017.sock

sudo service mongod start && mongod
于 2017-12-17T23:24:11.963 回答
12

最可能的原因是 mongod 进程在某个时候由 root 用户启动。因此,套接字文件 (/tmp/mongodb-27017.sock) 归 root 用户所有。mongod 进程通常在其自己的专用用户下运行,并且该用户没有删除该文件的权限。

正如您已经发现的那样,解决方案是删除它。然后 mongodb 能够使用正确的权限重新创建它。只要使用初始化脚本或在正确的用户帐户下启动 mongodb,这应该在重新启动后持续存在。

于 2016-02-22T16:21:46.987 回答
10
$ sudo mongod

它为我解决了问题

于 2017-10-09T15:41:13.277 回答
6

更改 /tmp 目录中的所有权 mongodb-27017.sock 文件并再次启动 mongod。

cd /tmp

sudo chown mongodb:mongodb mongodb-27017.sock
sudo systemctl start mongod
于 2020-05-09T05:37:29.787 回答
3

对于基于 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

于 2016-03-30T09:51:33.713 回答
1

重启后手动重启 mongod 服务解决了这个问题。

长期解决方案是添加静态主机名,而不是 mongod.conf 文件中的 ip address 'net' 部分(我怀疑问题是当 mongod servis 启动时,ip 地址尚未提供给服务器)。

于 2020-07-18T16:06:42.937 回答
0

如果您在使用 docker 时遇到此问题,请参阅此问题:

MongoDB docker 容器“无法取消链接套接字文件”

于 2021-05-18T00:27:57.483 回答