MongoDB 拒绝启动,不允许操作

o01*_*o01 7 mongodb

当我尝试运行时mongod --dbpath=./data,出现以下错误:

2017-09-20T21:47:55.720+0200 I CONTROL  [initandlisten] MongoDB starting : pid=20500 port=27017 dbpath=./data 64-bit host=debian
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten] db version v3.2.11
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten] git version: 009580ad490190ba33d1c6253ebd8d91808923e4
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2l  25 May 2017
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten] allocator: tcmalloc
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten] modules: none
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten] build environment:
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten]     distarch: x86_64
2017-09-20T21:47:55.721+0200 I CONTROL  [initandlisten]     target_arch: x86_64
2017-09-20T21:47:55.722+0200 I CONTROL  [initandlisten] options: { storage: { dbPath: "./data" } }
2017-09-20T21:47:55.781+0200 I -        [initandlisten] Detected data files in ./data created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2017-09-20T21:47:55.802+0200 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2017-09-20T21:47:55.894+0200 E STORAGE  [initandlisten] WiredTiger (1) [1505936875:894516][20500:0x7f357e7c1cc0], file:WiredTiger.wt, connection: ./data/WiredTiger.wt: handle-open: open: Operation not permitted
2017-09-20T21:47:55.895+0200 I -        [initandlisten] Assertion: 28595:1: Operation not permitted
2017-09-20T21:47:55.895+0200 I STORAGE  [initandlisten] exception in initAndListen: 28595 1: Operation not permitted, terminating
2017-09-20T21:47:55.895+0200 I CONTROL  [initandlisten] dbexit:  rc: 100
Run Code Online (Sandbox Code Playgroud)

目录的内容和权限./data如下:

drwxrwx--- 1 root vboxsf  4096 Sep 20 05:11 .
drwxrwx--- 1 root vboxsf  4096 Sep 20 22:07 ..
-rwxrwx--- 1 root vboxsf 36864 Sep 19 05:25 collection-0--661121965341019305.wt
-rwxrwx--- 1 root vboxsf 36864 Sep 19 05:26 collection-0--9187569579836644431.wt
-rwxrwx--- 1 root vboxsf 16384 Sep 19 05:24 collection-2--661121965341019305.wt
drwxrwx--- 1 root vboxsf     0 Sep 19 19:16 diagnostic.data
-rwxrwx--- 1 root vboxsf 16384 Sep 19 05:24 index-0-7518289071480072689.wt
-rwxrwx--- 1 root vboxsf 16384 Mar  1  2017 index-1-7518289071480072689.wt
-rwxrwx--- 1 root vboxsf 36864 Sep 19 05:26 index-2-7518289071480072689.wt
-rwxrwx--- 1 root vboxsf 36864 Sep 19 05:25 index-3-7518289071480072689.wt
drwxrwx--- 1 root vboxsf     0 Sep 20 05:12 journal
-rwxrwx--- 1 root vboxsf 36864 Sep 19 05:24 _mdb_catalog.wt
-rwxrwx--- 1 root vboxsf     0 Sep 20 05:11 mongod.lock
-rwxrwx--- 1 root vboxsf 36864 Sep 19 05:26 sizeStorer.wt
-rwxrwx--- 1 root vboxsf    95 Feb 23  2017 storage.bson
-rwxrwx--- 1 root vboxsf    49 Feb 23  2017 WiredTiger
-rwxrwx--- 1 root vboxsf  4096 Sep 19 05:24 WiredTigerLAS.wt
-rwxrwx--- 1 root vboxsf    21 Sep 20 04:49 WiredTiger.lock
-rwxrwx--- 1 root vboxsf  1000 Sep 19 05:27 WiredTiger.turtle
-rwxrwx--- 1 root vboxsf 61440 Sep 20 05:12 WiredTiger.wt
Run Code Online (Sandbox Code Playgroud)

我的用户在vboxsf组中。

有谁知道我为什么会收到这个错误,或者我能做些什么来解决这个问题?


我应该注意到我在 Windows 8.1 主机上的 Virtual Box 中运行 Debian。有问题的目录是一个共享文件夹(因此是vboxsf组)。

Joh*_* N. 6

为方便起见,下面列出了可能的解决方案的摘要:

不允许 MongoDB 操作

MongoDB 运行良好,直到有一天它生成了一个锁定文件并停止启动,并出现以下错误:

相应的接受答案是:

假设权限是正确的。这可能是一个 selinux 问题,请尝试:

setenforce 0
Run Code Online (Sandbox Code Playgroud)

然后尝试启动服务器。如果服务器启动,您将必须使用 semanage 为 mongo 数据文件夹设置适当的上下文

Windows 挂载 /data/db

我正在尝试从我的 Windows 开发 PC 挂载 /data/db 但每次我尝试时,Mongo 都会崩溃,因为它似乎没有正确的 BUT :

  • 我已经更改了 windows 中的安全参数,让每个人都可以做任何事情(完全访问)
  • 如果我安装在不同的目录中,它就可以工作(容器自行启动,我可以在我的目录中写入)

一种可能的解释是:

找到一个链接:mongodb 不支持 VirtualBox 共享文件夹。

显然,一位用户找到了一种解决方法并将其记录为:

它使用使用 docker volume create --name=myvolume 创建的卷工作 使用卷名而不是本地路径。这只是一种解决方法。更准确地说,我在我的案例中使用的线路:

docker volume create --name=mongodata
docker run -d -p 27017:27017 -v mongodata:/data/db --name=mymongo mongodb:3.3
Run Code Online (Sandbox Code Playgroud)

带有卷的 Mongodb 不起作用(不允许操作)

最初编写该问题的人已经确定它不起作用并正在寻找解决方案。

Mongo docs说例如,HGFS和Virtual Box的共享文件夹不支持此操作。 https://docs.mongodb.com/manual/administration/production-notes/#fsync-on-directories

我想知道是否可以在当前的 docker for windows 上工作。

在这种情况下有一个链接建议调整 mongodb 存储引擎:

docker 不打算实现这样的东西吗?

不,不是现在。您可以调整 mongodb 存储引擎以处理 SMB 共享:https : //forums.docker.com/t/issues-with-mongo-with-mounted-volume-for-data/15085/4

概括

围绕 MongoDB 和 Microsoft Windows 上的虚拟服务器存在多个问题,因此您可能需要考虑在 *nix 环境中运行 MongoDB。


小智 4

知道 mongod 的问题...它不适用于 VirtualBox 共享文件夹。dbPath 必须是本地的、NFS、SAN..无论如何安装的东西...