我正试图使用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用于缓存。