WSL: mount drives the docker way

So, I have this shiny Surface Pro 4 with a nice 64Go SDCard and, as you may know if you’re reading this blog, WSL does not (yet) mount SDCards or USB sticks.

I tried two “normal” ways, with CIFS and SSHFS, however when trying to mount the filesystem I got the not so nice errors.

CIFS:

ref: https://www.swiftbyte.com/articles/linux/mounting-a-wicd bashhare-in-ubuntu-on-boot

SSHFS:

ref: https://www.digitalocean.com/community/tutorials/how-to-use-sshfs-to-mount-remote-file-systems-over-ssh

Then, while playing with Docker and the WSL, I could actually mount my SDCard to a docker (normal) and then access it from the “normal/linux” docker client:

Ok, until now, everything is working as expected. A quick inspect show us the configuration of the Mount:

At this moment, as my *nix skills are a bit rusty, I searched for an alternative to NFS as my direct memories are not so good, so don’t blame me but my Masta instead.
Also the high risk of not being able to mount it (once again) didn’t motivate me too much (still, I will try it in another blog if no one else tries it).

“Et la lumière fut!”. I already went to the extent of implementing an SSH server into a container (by the way, no need for that to access it) so I could try to RSYNC and … IT WORKED.

So here is the setup needed:

  1. Have Docker for Windows installed
  2. Pull the Ubuntu image (I choose this one for “standardization” purpose)
  3. Create a new container from Powershell! with the following options and follow the configuration stated in Docker own Dockerfile for the SSH service:
    PS> docker run -it -p 2222:22 -v d:/:/mnt ubuntu bash

    • The reason is simple: Powershell “sees” your external drive
    • This command will expose the SSH port to your local port 2222 and mount your external drive to “/mnt”
  4. Install RSYNC in the container
    $ apt-get install rsync

    • You can exit your session without killing your container by using “CTRL+P” and then type “CTRL+Q”
  5. Open a WSL Bash console
    • You can already connect with your WSL Docker client and see your drive mounted in “/mnt”
  6. Install RSYNC (if not already done) in WSL
    $ apt-get install rsync
  7. Try to sync a file from WSL to your External drive
    /usr/sbin/rsync -avh --progress -e "ssh -p2222" bigfile.txt root@192.168.192.55:/mnt/

    • Please note that you need your “local IP” as we did map the port 2222 to the ssh port of the Container
    • For this first test, I created a 1Go file and synched it

And here you have, now you can have your files synched to your external drives.
I will do a follow-up blog post with another synch tool: Unison (both ways sync for the win).

>>> Nunix out <<<