Getting path and accessing persistent volumes in Docker for Mac

If you use persistent data volumes in Docker, you might want to access them via command-line. If your docker host is Linux, that's not a problem; you can find Docker volumes by /var/lib/docker/volumes path.

However, that's not the case when you use Docker for Mac. Try to cd /var/lib/docker/volumes from your MacOS terminal, and you'll get nothing. You see, your Mac machine isn't a real Docker host. Docker for Mac runs a virtual machine behind the scenes and hides it from you to make things simpler. Simpler, unless you want to dig deeper.

So, to access persistent volumes created by Docker for Mac, you need to log in that hidden virtual machine first, which is not that straightforward.

In order to accomplish this, we need to use a serial terminal on Mac. There's a terminal application called "screen" that's going to help us. 

  1. We need to "screen into" the Docker driver by executing a command: screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
  2. You should see a blank screen, just press Enter, and after a while, you should see a command line prompt
  3. Now you're inside Docker's VM and you can cd into volumes dir by typing: cd /var/lib/docker/volumes
  4. Profit, you got there! 
  5. If you need to transfer files from your MacOS host into Docker host (for example to put files into docker volumes) use directories shared between host (mac os) and Docker host (Docker VM), you can find a list of such directories under File Sharing tab of your Docker for Mac application.

Hope this helps someone!