How to Change the Default Docker Directory to Save You Some Precious Disk Space

Are you the kind of person that likes to gratuitously partition their hard disk because they’re obsessed with compartmentalisation? Do you think Docker is great but it’s eating up all of your /var or / space? Are you sick of manually cleaning up all Docker volumes, images and dangling containers for Docker to fill your disk to the brim with this useful junk within a fortnight? I’ve got an easy solution for you (actually, two). Change the default Docker graph directory! How, do you ask? I’ll show you how.

Docker stores most of its runtime files (graph data, images, runtimes, temp files and much more) in /var/lib/docker by default. But I don’t want that, because my /var partition is just 10 GiB and Docker can easily gobble all of that up. I don’t mind storing these files in my own home directory instead so that’s what I’m going to do.

$ mkdir -p /home/dvejmz/var/lib/docker

Now, there are two ways (perhaps more, depends on how much free time you have) in which you can relocate your Docker files: the old way and the new way. The old way simply edits the startup flags passed to the Docker daemon when invoked as a systemd unit. Something like this

[Service]
ExecStart= 
ExecStart=/usr/bin/dockerd --data-root=/home/dvejmz/var/lib/docker -H fd://

(Credit to Arch Linux Wiki)

The new way, which I recommend since it doesn’t rely on any systemd mechanisms, is editing a JSON file. Newer installations of Docker (such as v18.0 which I’m using at the time of writing this article) will attempt to retrieve their start-up flags from a JSON config file located in /etc/docker/daemon.json, and add the following key to it (if the file doesn’t exist, just create it there):

{
    "graph": "/home/dvejmz/var/lib/docker"
}

The daemon.json file accepts the same options that you may pass to dockerd when launching it. See the official docs for a complete list.

Once you have that, purge all the junk in the old directory.

$ docker rm $(docker ps -a -q)
$ docker rmi $(docker images -q)
$ docker volume rm $(docker volume ls -qf dangling=true)

Now just restart the Docker daemon for the changes to take effect

$ sudo systemctl restart docker

You’re done, enjoy your newly recovered partition space. And by the way, if you’re still lacking in hard disk space after applying this neat trick, check out baobab and bleachbit.

Back to top ↑

Do you have any questions, comments or feedback about this article to share with me or the world?

You can message me on Mastodon. You can also reach out to me in a couple of other ways, if you'd prefer. I would love to hear your thoughts either way!

Articles from friends and people I find interesting

Snipes Everywhere

Scoring details aren't quite right. Long, tedious, more correct results, but I don't like the code much. Bear got a taste of me. Also: Resist fascism, and take care of one another.

via ronjeffries.com March 21, 2025

A more robust raw OpenBSD syscall demo

Ted Unangst published dude, where are your syscalls? on flak yesterday, with a neat demonstration of OpenBSD’s pinsyscall security feature, whereby only pre-registered addresses are allowed to make system calls. Whether it strengthens or weakens securi…

via null program March 6, 2025

Best Simple System for Now

You can have your cake and eat it, as long as you bake it carefully. ‘We can do this the quick way and pay later, or the thorough way and pay now.’ This seems to be a fundamental dichotomy in software development, between ‘perfectionism’ and ‘pragmatism’, …

via Blog on Dan North & Associates Limited February 3, 2025

Generated by openring