How to change docker root data directory and why would you want to do that (hint: to optimize space)
Tags: docker, dockerspaceissues, dockercompose, linux
Published: 2023-11-29 20:35:27

---
title: How to change docker root data directory and why would you want to do that (hint: to optimize space)
published: true
date: 2023-11-23 09:12:35 UTC
tags: docker,dockerspaceissues,dockercompose,linux
canonical_url: https://diegocarrasco.com/change-docker-data-directory-vps-optimization/
---

## Context

I have a small vps for some personal projects which has 20 gb storage. I have one project there, and a few day ago I no longer had any available space. That meant docker services went down (and so the small project). I knew the project should not use that much space, and I found out that `docker` was using around 10gb space for `overlay2`.

The whole `overlay2` situation is enough for another post, but I found out (after researching and reading a lot of articles) that it grows pretty fast, and it is really hard to clean. `òverlay2` is one of the ways docker synchronizes the filesystem, and it duplicates data.

I decided to change the root data directory (by default at `/var/lib/docker`) to another volume attached to my vps, which I can increase in space if needed.

## Steps

_ **Important:** _

**Make a backup** of all your information (volumes, containers and everything that you cannot automatically generate again.)

### 1. Stop docker service

```
sudo systemctl stop docker

```

on older systems

```
sudo service docker stop

```

### 2. Edit `etc/docker/daemon.json` or create it if it does not exist

```
nano /etc/docker/daemon.json

```

Add the following line _if empty_

```
{ 
"data-root": "/path/to/your/new/docker/root"
}

```

or, _if there is already something there_, add just the key, appending a comma in the previous line

```
"data-root": "/path/to/your/new/docker/root"

```

so that is looks like this:

```
{
"another-key": "another value", 
"data-root": "/path\_to\_new\_root/docker"
}

```

**Important**

- This will **change** your data directory, **not move** it. Your data will not be there when you restart the docker service. All the containers and volumen will be created from zero.
- This will recreate the whole docker data directory structure on the destination, as docker need it to run properly.
- Doing this is similar to removing all your containers, volumes and so on. (although in this case they are still on the old directory until you remove them manually)
- If you use a volume, another hard-drive or similar as the new destination, make sure it has enough free space available. I would recommend no less than 10 gb for small projects, with the possibility of increasing it. 

### 3. Restart docker

```
sudo systemctl restart docker

```

or, on older systems

```
sudo service docker start

```

### 4. Rebuild your projects and restore backups if necessary

If you use docker-compose for your projects, just run `docker compose up -d --build`.

If you have database and data backups, restore them.

* * *

With this you have now changed the root data directory from `/var/lib/docker` to `/path_to_new_root/docker`

## References

- [https://tienbm90.medium.com/how-to-change-docker-root-data-directory-89a39be1a70b](https://diegocarrasco.com/change-docker-data-directory-vps-optimization/)
- [https://docs.docker.com/config/daemon/](https://diegocarrasco.com/change-docker-data-directory-vps-optimization/)
- [https://stackoverflow.com/questions/36014554/how-to-change-the-default-location-for-docker-create-volume-command](https://stackoverflow.com/q/36014554/624088)
- [https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory](https://stackoverflow.com/q/36014554/624088)
- [https://stackoverflow.com/questions/32070113/how-do-i-change-the-default-docker-container-location/50726177#50726177](https://stackoverflow.com/a/50726177/624088)