脚本
Dump
docker-volume-dump.sh
#!/usr/bin/env bash
dump_dir=~/docker-volume-dump
if [ ! -d $dump_dir ]; then
mkdir -p $dump_dir
fi
for volume in $(docker volume ls -q); do
dump_file=$dump_dir/$volume.tar.gz
if [ -f $dump_file ]; then
( set -x; echo rm $dump_file; )
fi
echo "Dump docker volume \"$volume\" to \"$dump_file"\"
docker run --rm -v $volume:/from alpine sh -c "cd /from; tar -cf - ." | gzip > $dump_dir/$volume.tar.gz
done
Restore
docker-volume-restore.sh
#!/usr/bin/env bash
dump_dir=~/docker-volume-dump
for file in ~/docker-volume-dump/* ; do
volume=$(basename $file)
volume=${volume%%.*}
echo "$volume"
docker volume inspect $volume &>/dev/null
if [ $? -eq 0 ]; then
( set -x; docker volume rm $volume 1>/dev/null )
fi
( set -x; docker volume create $volume 1>/dev/null )
cat $file | docker run --rm -i -v $volume:/to alpine sh -c 'tar zxvf - -C /to'
done