这是一个至少有 5 年历史的错误。我发现的唯一问题是作为 WONTFIX 和 RTFM 关闭的,但是这里针对 2.4 记录的这个问题在某种程度上与这个问题有关:https://jira.mongodb.org/browse/SERVER-9383。
MongoDB 将拒绝创建 unix 域套接字,除非 IPV4 IP 地址是 127.0.0.1 或 0.0.0.0。您不能在一个界面上运行它或禁用它(原因未说明)。对我来说,这反映了 MongoDB 代码的质量。
我将代码追溯到 2011 年,我认为这是一种粗略的技巧,可以防止您意外地让 2 个 mongodb 进程尝试创建相同的套接字文件。如果您在 192.168.1.1:27017 和 192.168.1.2:27017 上运行一个实例,它们都会尝试在 /tmp/mongod-27017.sock 处创建相同的套接字文件。由于 10gen 没有人知道为什么要进行检查,因此自 2011 年以来没有人修复它。很容易检查 127.0.0.1:27017 是否已在使用,因为 EADDRINUSE,但很难检查您的套接字文件已过时,或者如果另一个进程创建了它。我不确定他们为什么不只是以不同的方式命名套接字文件。
在此处查看代码:https://github.com/mongodb/mongo/blob/r2.2.4/src/mongo/util/net/listen.cpp#L91
if (useUnixSockets && (sa.getAddr() == "127.0.0.1" || sa.getAddr() == "0.0.0.0")) // only IPv4
out.push_back(SockAddr(makeUnixSockPath(port).c_str(), port));