skip to Main Content

How to move docker data directory to another location on Ubuntu

Docker is a popular container management platform that can dramatically speed up your development workflow. It is available as a package on major Linux distributions, including Ubuntu.

The standard data directory used for docker is /var/lib/docker, and since this directory will store all your images, volumes, etc. it can become quite large in a relative small amount of time.

If you want to move the docker data directory on another location you can follow the following simple steps.

1. Stop the docker daemon

sudo service docker stop

2. Add a configuration file to tell the docker daemon what is the location of the data directory

Using your preferred text editor add a file named daemon.json under the directory /etc/docker. The file should have this content:

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

of course you should customize the location “/path/to/your/docker” with the path you want to use for your new docker data directory.

3. Copy the current data directory to the new one

sudo rsync -aP /var/lib/docker/ /path/to/your/docker

4. Rename the old docker directory

sudo mv /var/lib/docker /var/lib/docker.old

This is just a sanity check to see that everything is ok and docker daemon will effectively use the new location for its data.

5. Restart the docker daemon

sudo service docker start

6. Test

If everything is ok you should see no differences in using your docker containers. When you are sure that the new directory is being used correctly by docker daemon you can delete the old data directory.

sudo rm -rf /var/lib/docker.old

Follow the previous steps to move docker data directory and you won’t risk any more to run out of space in your root partition, and you’ll happily use your docker containers for many years to come. 😉

7. Extra step: remote debug on your Docker container!

Do you know that you can remote debug your application running on a Docker container? Check out my tutorial on Remote debugging a Django project in VS Code! It uses Django as an example, but the Docker related part is general.

augusto

Freelance developer and sysadmin

This Post Has 31 Comments
  1. I had a disk full error due to docker eating up all the space. Using your procedure I solved the problem. Thanks!

    1. Not at all, at least if the new data directory location is in the same type of storage as the old one.
      For example if the old data directory was stored on an SSD disk and the new one is on magnetic or network storage, the performance will degrade. Otherwise I do not expect any difference in Docker performance.

  2. Thanks for the guide – it works. However, I must warn others that if your file system is ecryptfs, then docker won’t be able to use it as a storage backend for the images.

  3. If you’re using ZFS then your daemon.json should look like this;

    {
    “storage-driver”: “zfs”,
    “graph”: “/path/to/your/zpool/location/for/docker”
    }

  4. For some reason, that broke several symlink and half my docker machines do no longer start. I receive errors like these ones when I try:

    Error response from daemon: error evaluating symlinks from mount source “/var/lib/docker/volumes/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/_data”: lstat /var/lib/docker: no such file or directory
    Error: failed to start containers: xxxxxxxx

  5. On Fedora, and in general, depending on the way docker service is started, you might have to use following commands to stop/start docker
    systemctl stop docker
    systemctl start docker

  6. If you’re confused because some posts refer to a “graph” option in daemon.json and some to “data-root”, you’re not alone. In fact they are the same, but the “graph” option is deprecated (but still works:-).

    “graph” has been replaced by “data-root”, both as an option in daemon.json and a flag to the dockerd daemon. It seems that it’s been that way since v17.05 in 2017.

    See: https://docs.docker.com/engine/deprecated/#-g-and—graph-flags-on-dockerd

  7. Hey, it didn’t work on my platform, however when i try to restore old docker images it just says couldnt find image locally and proceeds to download again. How do I restore it?

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top