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



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

WARNING: This file system is not supported.

启动后,蒙戈立即关机。

关于如何解决这个问题,有什么提示或技巧吗?

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

参见mongoDB制作说明:

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

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

假设您的容器具有VOLUME["/data"]

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

这并不总是理想的(但以下是Edward Chu(chuyik)为Mac设计的):

我认为这不是一个好的解决方案,因为数据刚刚移动到另一个容器,对吗
但它仍然在容器中,而不是本地系统(mac磁盘)中。

我找到了另一个解决方案,那就是使用sshfs在boot2docker-vm和mac之间映射数据,这可能会更好,因为数据不存储在linux容器中。

创建一个目录以在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" 每次在停止容器之前,我都会使用: 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"
  • 终端内:docker exec <container_name> mongodump

注意:我使用睡眠是因为我想确保mongo启动,这需要一段时间。

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

您似乎不需要MongoDb的数据目录,从docker-composer.yml中删除这些行应该可以顺利运行。

数据目录仅由mongo用于缓存。

最新更新