使用共享文件夹运行Mongo的Boot2Docker(在Windows上)(不支持此文件系统)

我正尝试使用Boot2Docker在Windows上使用共享文件夹来启动Mongo容器。 当开始使用run -it -v /c/Users/310145787/Desktop/mongo:/data/db mongo我在容器里面收到一条警告消息:

WARNING: This file system is not supported.

马戈关上后立即closures。

任何提示或技巧如何解决这个问题?

显然, 根据这个要求和Sev( sevastos ) ,mongo不支持通过VirtualBox共享文件夹安装音量:

请参阅mongoDB Productions注意事项 :

MongoDB需要在目录上支持fsync()的文件系统。
例如,HGFS和Virtual Box的共享文件夹不支持此操作。

所有的最简单的解决scheme和数据持久性的正确方法是数据卷

假设你有一个容器有VOLUME [“ /data ”]

 # Create a data volume docker create -v /data --name yourData busybox true # and use docker run --volumes-from yourData ... 

这并不总是理想的(但是以下是针对Mac的,由Edward Chu( chuyik ) ):

我不认为这是一个好的解决scheme,因为数据刚刚移动到另一个容器的权利?
但它仍然在容器内而不是本地系统(mac disk)。

我发现另一个解决scheme,就是使用sshfs来映射boot2docker vm和你的mac之间的数据,这可能会更好,因为数据不是存储在Linux容器内。

创build一个目录来存储boot2docker中的数据:

 boot2docker ssh mkdir -p /mnt/sda1/dev 

使用sshfs来连接boot2docker和mac:

 echo tcuser | sshfs docker@localhost:/mnt/sda1/dev <your mac dir path> -p 2022 -o password_stdin 

运行安装了mongo的映像:

  docker run -v /mnt/sda1/dev:/data/db <mongodb-image> mongod 

相应的boot2docker问题指向docker问题 12590(在1.6#12590中-v共享文件夹有问题) ,指向使用双斜线的解决方法

使用双斜杠似乎工作。 我在本地检查它,它的工作原理。

 docker run -d -v //c/Users/marco/Desktop/data:/data <image name> 

它也适用于

 docker run -v /$(pwd):/data 

作为一个解决方法,我只是从mongo deamon开始之前的一个文件夹复制。 另外,在我的情况下,我不关心日记文件,所以我只复制数据库文件。

我已经在我的docker-compose.yml command: bash -c "(rm /data/db/*.lock && cd /prev && cp *.* /data/db) && mongod"使用了这个命令command: bash -c "(rm /data/db/*.lock && cd /prev && cp *.* /data/db) && mongod"并且每次在停止之前我使用的容器: docker exec <container_name> bash -c 'cd /data/db && cp $(ls *.* | grep -v *.lock) /prev'

注意:/ prev被设置为一个卷。 path/to/your/prev:/prev

另一个解决方法是使用mongodump和mongorestore。

  • 在docker-compose.yml中: command: bash -c "(sleep 30; mongorestore --quiet) & mongod"
  • 在terminal: docker exec <container_name> mongodump

注:我使用睡眠,因为我想确保mongo开始,这需要一段时间。

我知道这涉及到手动工作等,但是我很高兴至less得到了在我的Windows 10机器上运行的现有数据的mongo,并且当我需要时仍然可以在我的Macbook上工作。

这似乎是你不需要MongoDb的数据目录,从docker-composer.yml中删除这些行应该运行没有问题。

数据目录仅供mongo用于caching。