Docker Volume mounts in WSL

Docker volumes are fiddly and just don't work out-of-the-box with WSL. Here's how to fix that...

When using the Windows Subsystem for Linux (WSL), Docker expects volume mounts to be in the format: /c/Users/brunty/code - however by default in WSL they're in the format: /mnt/c/Users/brunty/code as WSL is configured to mount drives in /mnt

Before Windows 10 1803 you'd have to sudo mount --bind /mnt/c /c then cd /c/Users/brunty/code in order to get docker volumes working properly.

Despite knowing that I need to sudo mount ... and cd /c/... etc - I'd always forget to do it, and then get confused when nothing was working in Docker. Frustrating when you just want to get stuff done, implicit steps like the ones above just aren't helpful at all.

However...

In versions of Windows after 1803 you can add the following to your /etc/wsl.conf file: (docs link)

[automount]
root = /

This option makes your mount point / instead of the default /mnt and means that you don't need to cd to /c/path/to/my/thing instead of /mnt/c/path/to/my/thing

Now you can use volume mounts like .:/app in a docker-compose.yml file etc without issue.

I'm not sure how I hadn't spotted this before but I found it in a gist while googling thinking "there's got to be a better way of doing this..." and finding the this gist

So thanks to Diego Alvarez (d1egoaz) for that comment! <3