Change Docker machine location - Windows
WindowsDockerDocker MachineDocker ToolboxWindows Problem Overview
I am using docker toolbox on Windows 7 to run docker. (docker version 1.9.1)
As it turns out, the docker machine creates its VM at C:\Users\username\.docker\machine\machines\default. As I commit the images, the size of VM at this location bloats up. Since it's Windows, I can't afford the luxury of space on the C drive.
Is there any way I can change the location of the default machine?
Windows Solutions
Solution 1 - Windows
This is what worked perfectly for me on Windows 7:
- Setup the MACHINE_STORAGE_PATH environment variable as the root of the location you want to use for the Docker machines/VMs, cache, etc.
- Install Docker Toolbox
- Run Docker Quickstart Terminal
Docker Toolbox will now create all the files at the location pointed at by MACHINE_STORAGE_PATH.
UPDATE:
Note that creating a new VM with the new storage path is not ideal, as the Docker Quickstart Terminal scripts don't seem to work with anything not named "default".
If you've already got a VM sitting in the C: drive, then the simplest thing to do would be to go to Oracle VirtualBox and delete the "default" VM, uninstall Docker Toolbox, delete C:\Users<username>.docker, and then follow the 3 steps above.
Note: uninstalling and reinstalling Docker Toolbox may not be required. But I haven't tested without it.
Update
To move Docker certificates also, set the DOCKER_CERT_PATH
variable to point to the path of the new drive. Thanks to @Nutle for the tip.
Solution 2 - Windows
You can move .docker
directory to another drive and create a junction point to it.
Please note that regular shortcut will not work.
For example:
Move .docker
directory from C:\Users\username
to D:\
and run:
C:\Users\username>mklink /j .docker D:\.docker
Junction created for .docker <<===>> D:\.docker
Solution 3 - Windows
Since 2015, there is now (June 2017) Hyper-V, which allows you to define where you want your VHDX
files:
See Docker for Windows 1.13.0, 2017-01-19 (stable):
> VHDX file containing images and non-host mounted volumes can be moved (using “advanced” tab in the UI)
That will modify the %APPDATA%\Docker\settings.json
with a line:
"MobyVhdPathOverride":"C:\\Users\\Public\\Documents\\Hyper-V\\New folder\\MobyLinuxVM.vhdx"
See this thread for more.
Original answer
Currently 2015 , docker-machine forces the use of %USERPROFILE%
:
See libmachine/mcnutils/utils.go#L17-L25
As commented in issue 499:
> > In the meantime, how will users be able to specify where the .docker/machine/*
files are stored?
>
> you can by specifying --storage-path
on the command line or using the environment variable MACHINE_STORAGE_PATH
.
(You can see it implemented in PR 1941)
Joost Den Boer points out in the comments
> Just tried '-s <path>
' on a Mac and it seems to work fine.
What might not be obvious is that the path option goes before the command.
Running "docker-machine -s /Volumes/other/location' create --driver=virtualbox
" created a new VirtualBox image at the other location.
Solution 4 - Windows
Simply use the VirtualBox graphic interface to relocate the file disk.vmdk
:
- Copy file
C:\Users\{myUsername}\.docker\machine\machines\default\disk.vmdk
into another folder, sayF:\docker-image\
. - Open
VirtualBox
, selectdefault
VM and openSettings
. - Open
Storage
, select currentdisk.vmdk
and release it (or delete it). - Click on
Choose Virtual Hard Disk File...
and search for copied file inF:\docker-image\
- A Warning occurs: VirtualBox complains of old VM UID then go to menu
File
, selectVirtual Media Manager...
and release or remove olddisk.vmdk
- Retry
4.
, it's done! - If required by your environment then do the relocation also for boot2docker.iso, Snapshot Folder, Video Capture.
Solution 5 - Windows
Put these two commands when running docker quick start terminal.
I suppose that your new location is "D:\docker" and your new machine name is "docker1"
export MACHINE_STORAGE_PATH=D:\\docker
docker-machine create --driver=virtualbox docker1
This should create a new machine with specified name in your new location.
Solution 6 - Windows
I could not get the MACHINE_STORAGE_PATH environment variable method working. It kept complaining about missing certificates when first initialising the machine. Still on Windows 7 so have to use docker-toolbox.
I got around the issue by:
- Uninstalling Docker Toolbox and restarting machine
- Open up Administrator prompt (Find command prompt, hold shift, choose "Run As Administrator")
- Deleting .docker from %USERPROFILE%: rmdir /S %USERPROFILE%.docker
- Create folder called .docker elsewhere: mkdir a:\.docker
- mklink /J %USERPROFILE%.docker a:\.docker
- Close Admin command prompt
- Reinstall Docker Toolbox
- Use the Docker Quickstart Terminal link to bootstrap everything.
- Kitematic can be opened now too (though I had to choose the "Use Virtual Box" option on first error.
Solution 7 - Windows
I have had a bit of trouble with any of the solutions above but this is what worked for me:
- define the
MACHINE_STORAGE_PATH
environment variable to point to your desired directory/folder. - Install docker-toolbox as normal, if this works for you then fine, but for me it was still installing inside
.docker
directory. - To fix this I have then stopped and removed the default machine that was created along with
.docker
folder from the Users directory. - Edited the
start.sh
script and added the line at the top:
e.g.
export MACHINE_STORAGE_PATH=D:\\Docker
- Run the Docker Quickstart Terminal Shortcut, which rebuilt the default machine inside the desired folder
Solution 8 - Windows
This answer is for people using Docker Toolbox (Windows 10 Home Build 1909, You can follow below steps for docker installation and then location change. I am not adding any images)
Install Docker Toolkit and VM must be installed with Admin Privileges after the installation of docker toolkit (*because Docker Toolkit also installs VM but it's of lower version and creates a problem with other iso files, u can uncheck also, in that case, *). Now we have to change the location of disk.vmdk and update the new location in VM.
- Install Docker Toolbox from here. Follow the instructions provided
- Now Download Virtual Machine v6+
- Install Virtual Machine as Administrator (By Right-clicking and selecting there)
- Goto place where your
VirtualBox.exe
(Not the installer) is present and right-click on it (you can find from the shortcut created on your Desktop) - goto properties --> compatibility --> change setting for all users --> select
run this program as administrator
- Now close the VM if it's running and run the
Kitematic
, If it fails (it will probably) then select option provided related to VM (only 2 options are there) - This time it will work, now close it
Changing the Location where Images will be downloaded
-
open your VM and close a newly running image
default
(right-click -> close --> power off) -
copy paste your
disk.vmdk
file (for me it's present atC:\Users\Dell\.docker\machine\machines\default\disk.vmdk
) to a place where you want to store your images that you download (basicallydisk.vmdk
is what will grow in size when you are using docker) -
Now we need to tell the VM also about this change
-
Right-click
default
image and goto settings -
Select Storage
-
remove
disk.vmdk
attachment by right-clicking --> remove (that was the older path binded disk.vmdk) -
click on
file
-->virtual media manager
and removedisk.vmdk
from here also (Now VM don't know if such a disk.vmdk thing exsists) -
Right-click
default
image --> storage -->add hard disk
(this option is just above that iso image) -
Now select that
disk.vmdk
that you have pasted somewhere -
Now run your docker cli and then run this command
docker run hello-world
-
If no error is there then it's all done
-
You can verify size by checking the sizes of those two vmdk disks and then pulling some new images
I have written a very descriptive answer starting from installation because I did face some issues and so wanted to make it highly straight forward for the others.
You can delete your disk.vmdk disk (older one) from your C drive if you want to
Solution 9 - Windows
Create file called c:\programdata\docker\config\daemon.json with content below where e:\images is location where do you want to store all you images etc. restart docker.
{ "graph": "e:\\images" }
This Worked like a charm
Reference - https://forums.docker.com/t/where-are-images-stored/9794/11
Solution 10 - Windows
These answers are out of date, as of the latest release. The location is configurable in the Settings user interface.
Solution 11 - Windows
I found lots of these answers were out of data, at least they did not work in my environment: win10 PRO, docker desktop community 2.0.0.3. Finally, I resolved this problem by this method:
-
uninstall docker
-
open Hyper-V manager (press WIN key and then enter "Hyper")
-
Change the default virtual hard disk locations in the Hyper-V settings (not on the VM settings) and confirm
-
install docker
-
check the disk image location in advanced options of docker settings
Solution 12 - Windows
I use windows 10 and Docker desktop (community) Version 2.0.0.0, I want to move vhdx file to another Drive.
Right click over Docker Desktop -> Settings then the Docker Desktop UI will open go to Advance -> Disk image location just change the path to new destination, the whole process was smooth and fast for me - it's automatically copy the vhdx file from original path to new path restart docker and all work as expected
Solution 13 - Windows
For windows 7:
-
copy paste your disk.vmdk file (for me it's present at C:\Users\name.docker\machine\machines\default\disk.vmdk) to a place where you want to store your images that you download (basically disk.vmdk is what will grow in size when you are using docker)
-
in Virtualbox Right-click default image and goto settings Select Storage remove disk.vmdk attachment by right-clicking --> remove
-
click on file --> virtual media manager and remove disk.vmdk from here also
-
Right-click default image --> storage --> add hard disk (this option is just above that iso image)Now select that disk.vmdk that you have pasted somewhere
-
change now this path in config.json (C:\Users\name.docker\machine\machines\default\config.json) change the storage path with this new one where u put the location of your hard disk ( "StorePath": "F:\docker-image")
save.