How can I change the location of docker images when using Docker Desktop on WSL2 with Windows 10 Home?

DockerWindows 10Docker DesktopWsl 2

Docker Problem Overview


I've just upgraded to Windows 10 Home May 2020, activated WSL2, and installed Docker Desktop.

WSL2 must be installed in my system disk, which is a small SSD. I don't want to fill it with docker images. How do I change the docker images path? I'd like to use a path in my big Windows filesystem.

The image location is somewhat confusing. I believe it is in /mnt/wsl/docker-desktop-data/.

How do I change the directory of docker images inside WSL2? May I change docker configuration to select a path inside /mnt/d, or mount a path from /mnt/d over docker data dirs?

Docker Solutions


Solution 1 - Docker

The WSL 2 docker-desktop-data vm disk image would normally reside in: %USERPROFILE%\AppData\Local\Docker\wsl\data\ext4.vhdx

Follow the following to relocate it to other drive/directory, with all existing docker data preserved (tested against Docker Desktop 2.3.0.4 (46911), and continued to work after updating the 3.1.0 (51484)):

First, shut down your docker desktop by right click on the Docker Desktop icon and select Quit Docker Desktop

Then, open your command prompt:

wsl --list -v

You should be able to see, make sure the STATE for both is Stopped.(wsl --shutdown)

  NAME                   STATE           VERSION
* docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

Export docker-desktop-data into a file

wsl --export docker-desktop-data "D:\Docker\wsl\data\docker-desktop-data.tar"

Unregister docker-desktop-data from wsl, note that after this, your ext4.vhdx file would automatically be removed (so back it up first if you have important existing image/container):

wsl --unregister docker-desktop-data

Import the docker-desktop-data back to wsl, but now the ext4.vhdx would reside in different drive/directory:

wsl --import docker-desktop-data "D:\Docker\wsl\data" "D:\Docker\wsl\data\docker-desktop-data.tar" --version 2

Start the Docker Desktop again and it should work

You may delete the D:\Docker\wsl\data\docker-desktop-data.tar file (NOT the ext4.vhdx file) if everything looks good for you after verifying

Solution 2 - Docker

Edit: re-register docker-desktop would set the default docker-data to C drive now, so we should only unregister docker-data as the accepted answer.

You can do

 wsl --unregister docker-desktop-data

 wsl --import docker-desktop-data D:\wsl\docker-desktop-data "C:\Program Files\Docker\Docker\resources\wsl\wsl-data.tar" --version=2

The tar file is the file used to install, and before it is your new destination.

This always work while the move-wsl or lxrunoffline didn't work for me on fast rings. And sometimes you have to unistall/install docker first

Solution 3 - Docker

  1. Stop Docker Desktop
  2. Relocate Docker folder from C:\Users\xxx\AppData\Local\Docker to new path
  3. Make sure C:\Users\xxx\AppData\Local\Docker is no longer there
  4. Open a cmd in administrator mode
  5. Run the following command that will create a symbolic link in the cmd window with the appropriate from and to path
    mklink /j "C:\Users\xxx\AppData\Local\Docker" "path to where you relocated your docker folder"
  1. Restart Docker Desktop

Solution 4 - Docker

Extending @Attila Badi 's answer would be to also give the same treatment to the C:\ProgramData\Docker folder, which seems to be used for WSL / Windows Containers. Even moving the Docker data folders, would still leave you with a boot drive ProgramData\Docker folder of massive proportions - especially if you are unable or unwilling to clean the images. You cannot migrate it, or move it once installed. Using the Docker engine advanced settings works in Linux container mode, but not in windows and vice versa and has trouble starting.

Steps I followed:

  1. Uninstall Docker. I know... Make sure you have saved what you need.

  2. Create the primary space-eating docker folders, in a location you have a lot of space, e.g. :

    D:\Data\Docker\ProgramData_Docker & D:\Data\Docker\AppData_Local_Docker

  3. Create linked folders, by running the below in a command window in administrator mode:

mklink /j "C:\Users\xxx\AppData\Local\Docker" "D:\Data\Docker\ProgramData_Docker"
mklink /j "C:\ProgramData\Docker" "D:\Data\Docker\AppData_Local_Docker"

4. Install Docker.

You should be able to merrily pull windows server images, but not clog up your boot drive.

Solution 5 - Docker

For me docker won't start with junction.

Then I've used just directory symbolic link:

Docker stopped

Folder "wsl" moved to other location on disk "B"

RUben@AD-RUBEN C:\Users\RUben\AppData\Local\Docker
$ mklink /D wsl "B:\dev\wsl"
**symbolic link** created for wsl <<===>> B:\dev\wsl

enter image description here

Containers and Images are ready to use:

enter image description here

Solution 6 - Docker

I found this tool from pxlrbt on github. It's using standard wsl import/export and pretty safe. Just moved both my docker-desktop-data distro to a different drive and it works well.

Solution 7 - Docker

A nice tool:

DDoSolitary/LxRunOffline: A full-featured utility for managing Windows Subsystem for Linux (WSL)

https://github.com/DDoSolitary/LxRunOffline

LxRunOffline.exe move    Move a distribution to a new directory.
Options:
  -n arg                Name of the distribution
  -d arg                The directory to move the distribution to.

for example:

quit docker desktop, then:

wsl --shutdown
LxRunOffline.exe move -n docker-desktop-data -d D:\vm\dockerdesktop\wsl\data

Solution 8 - Docker

In Windows 10 home, docker desktop creates the VM under ""C:\Users\xxx\AppData\Local\Docker" directory and it is this VM that contains the downloaded docker images. If you want to change the VM location from C: to a different directory you can do this by creating a junction on windows (prior to docker desktop installation) using a command like below:

mklink /j "C:\Users\xxx\AppData\Local\Docker" "D:\Users\xxx\AppData\Local\Docker"

Note that prior to executing the command the target directory structure should exist while you should delete the C:\Users\xxx\AppData\Local\Docker directory if it exists already else the command could fail. Now install docker desktop on windows 10 home and voila you can see stuff inside "D:\Users\xxx\AppData\Local\Docker" directory namely the docker VM hard disk image file that is going to contain all the downloaded docker images.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnevesView Question on Stackoverflow
Solution 1 - DockerFranks CHOWView Answer on Stackoverflow
Solution 2 - DockerYiming LuView Answer on Stackoverflow
Solution 3 - DockerAttila BadiView Answer on Stackoverflow
Solution 4 - DockerAnthony HorneView Answer on Stackoverflow
Solution 5 - DockerRUbenView Answer on Stackoverflow
Solution 6 - DockersidecusView Answer on Stackoverflow
Solution 7 - DockerXingxing QiaoView Answer on Stackoverflow
Solution 8 - DockerAnupam YadavView Answer on Stackoverflow