我有一个写入 mongodb 套接字的节点应用程序。但是,在启动节点应用程序后,我收到错误:
MongoServerSelectionError: connect EACCES /tmp/mongodb-27017.sock\n
节点应用程序在用户 X 下运行,而
/tmp/mongodb-27017.sock
文件只能由用户 mongodb
写入。现在更改 /tmp/mongodb-27017.sock
的权限没有多大意义,因为 mongod 似乎每次重新启动时都会重新创建该套接字文件,并重置权限。我不想在 mongodb 用户下运行我的节点应用程序。让节点写入 mongodb 套接字的正常方式是什么?
一些细节:
我将 mongod 作为服务运行。我开始服务:
sudo systemctl start mongod.service
服务启动时,mongod 会创建
/tmp/mongodb-27017.sock
文件。该文件的权限是:
srwx------ 1 mongodb mongodb 0 dec 9 13:00 /tmp/mongodb-27017.sock
我的/tmp目录的权限是:
drwxrwxrwt 28 root root 4096 dec 9 14:10 tmp
我用来连接mongo的connectionUri是:
mongodb://%2Ftmp%2Fmongodb-27017.sock
我正在运行 mongodb v4.0.21
mongod
采用 --filePermissions 0666
选项将套接字文件权限设置为所需的值。
很可能可以在配置文件中设置等效选项。
考虑编辑
/etc/mongd.conf
,这样您就可以保留默认的服务文件。
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
unixDomainSocket:
enabled: true
pathPrefix: /tmp
filePermissions: 0666