Boot2Docker (on Windows) running Mongo with shared folder (This file system is not supported)

后端 未结 3 1643
无人共我
无人共我 2021-01-15 15:27

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 mong

相关标签:
3条回答
  • 2021-01-15 15:57

    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.

    0 讨论(0)
  • 2021-01-15 16:11

    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.

    0 讨论(0)
  • 2021-01-15 16:12

    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
    
    0 讨论(0)
提交回复
热议问题