Docker volume backup and restore
Solution 1:
You're right. Since you can have multiple containers with volumes on their own, you need to keep track which volume corresponds to which container. How to do that depends on your setup: I use the name -data for the data container, so it's obvious to which container a image belongs. That way it can be backed up like this:
VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz
Now you just need to rebuild your image and recreate your data container:
cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
-i busybox tar -C /path/int/container -xzf -
So this means you need to backup:
- Dockerfile
- volume
- volume path in container
- name of the container the volume belongs to
Update: In the meanwhile I created a tool to backup containers and their volume(s) (container(s)): https://github.com/discordianfish/docker-backup and a backup image that can create backups and push them to s3: https://github.com/discordianfish/docker-lloyd
Solution 2:
In newer Docker (tested in 1.9.1, build 9894698
) you can use the cp
command.
Here is an example how to copy a directory from the container to the host:
docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/
Here is an example how to copy a directory from the container to a tar
file:
docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar
Last but not least an example how to copy a directory from the container to a tar.gz
file:
docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz