Boot2Docker (on Windows) running Mongo with shared

2019-02-19 20:05发布

I am trying to start a Mongo container using shared folders on Windows using Boot2Docker. When starting using run -it -v /c/Users/310145787/Desktop/mongo:/data/db mongo i get a warning message inside the container saying:

WARNING: This file system is not supported.

After starting mongo shutsdown immediately.

Any hints or tips on how to solve this?

3条回答
够拽才男人
2楼-- · 2019-02-19 20:15

As an workaround I just copy from a folder before mongo deamon starts. Also, in my case I don't care of journal files, so i only copy database files.

I've used this command on my docker-compose.yml command: bash -c "(rm /data/db/*.lock && cd /prev && cp *.* /data/db) && mongod" And everytime before stoping the container I use: docker exec <container_name> bash -c 'cd /data/db && cp $(ls *.* | grep -v *.lock) /prev'

Note: /prev is set as a volume. path/to/your/prev:/prev

Another workaround is to use mongodump and mongorestore.

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

Note: I use sleep because I want to make sure that mongo started, and it takes a while.

I know this involves manual work etc, but I am happy that at least I got mongo with existing data running on my Windows 10 machine, and still can work on my Macbook when I want.

查看更多
放荡不羁爱自由
3楼-- · 2019-02-19 20:17

It's seems like you don't need the data directory for MongoDb, removing those lines from your docker-composer.yml should run without problems.

The data directory is only used by mongo for cache.

查看更多
萌系小妹纸
4楼-- · 2019-02-19 20:29

Apparently, according to this gist and Sev (sevastos), mongo doesn't support mounted volume through the VirtualBox shared folder:

See mongoDB Productions Notes:

MongoDB requires a filesystem that supports fsync() on directories.
For example, HGFS and Virtual Box’s shared folders do not support this operation.

the easiest solutions of all and a proper way for data persistance is Data Volumes:

Assuming you have a container that has VOLUME ["/data"]

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

This isn't always ideal (but the following is for Mac, by Edward Chu (chuyik)):

I don't think it's a good solution, because the data just moved to another container right?
But it still inside the container rather than local system(mac disk).

I found another solution, that is to use sshfs to map data between boot2docker vm and your mac, which may be better since data is not stored inside linux container.

Create a directory to store data inside boot2docker:

boot2docker ssh
mkdir -p /mnt/sda1/dev

Use sshfs to link boot2docker and mac:

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

Run image with mongo installed:

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

The corresponding boot2docker issue points out to docker issue 12590 ( Problem with -v shared folders in 1.6 #12590), which points to the work around of using double-slash.

using a double slash seems to work. I checked it locally and it works.

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

it also works with

docker run -v /$(pwd):/data
查看更多
登录 后发表回答