If you are using named volumes in Docker, sometimes you might want to perform backups of those volumes and restore said backups. It might be for the safety of your data or to move your containers to another host machine.
In a general sense, here is the command you need to run to perform an uncompressed backup:
$ docker run --rm --volumes-from <container> -v $(pwd):/backup busybox tar -cvf /backup/backup.tar /path/to/backup
Explanation:
- start a
busybox
container (busybox is a lightweight Linux image with some useful tooling) --rm
– remove container after it exits--volumes-from <container>
– mounts the volumes used by<container>
inside the busybox container-v $(pwd):/backup
– mounts the current path on the host as a/backup
folder in the busybox container- execute a
tar
command that packages/path/to/backup
to abackup.tar
file in the current directory
To restore the uncompressed backup:
$ docker run --rm --volumes-from <container> -v $(pwd):/backup busybox tar -xvf /backup/backup.tar -C /
Here is the command to perform a compressed backup:
$ docker run --rm --volumes-from <container> -v $(pwd):/backup busybox tar -czvf /backup/backup.tar.gz /path/to/backup
To restore the compressed backup:
$ docker run --rm --volumes-from <container> -v $(pwd):/backup busybox tar -xzvf /backup/backup.tar.gz -C /
Ok, now let’s take a look at an example. I will backup and restore the volumes of my nginx-proxy
container. The container has 2 volumes, mounted at /data
and /etc/letsencrypt
.
Backup:
$ docker run --rm --volumes-from nginx-proxy -v $(pwd):/backup busybox tar -cvf /backup/nginx-data.tar /data
$ docker run --rm --volumes-from nginx-proxy -v $(pwd):/backup busybox tar -cvf /backup/letsencrypt-data.tar /etc/letsencrypt
Restore:
$ docker run --rm --volumes-from nginx-proxy -v $(pwd):/backup busybox tar -xvf /backup/nginx-data.tar -C /
$ docker run --rm --volumes-from nginx-proxy -v $(pwd):/backup busybox tar -xvf /backup/letsencrypt-data.tar -C /
Hope this helps, have fun clickity-clacking.
Leave a Reply