#!/bin/bash # Please read the README.md distributed along this script CONTAINERS=`docker ps --format '{{.Names}}'` echo "" echo " == BACKUP RUNNING DOCKER BINDS & VOLUMES (v0.1) == " echo "" for c in $CONTAINERS; do IMAGE=`docker inspect -f '{{.Config.Image}}' $c` VOLUMES=`docker inspect -f '{{range .Mounts}}{{if eq .Type "volume"}}{{println .Name}}{{end}}{{end}}' $c` BINDS=`docker inspect -f '{{range .Mounts}}{{if eq .Type "bind"}}{{println .Source}}{{end}}{{end}}' $c` TIMESTAMP=`date +"%Y%m%d_%H%M%S"` ENVIRONMENT=`docker inspect -f '{{ range .Config.Env }}--{{println .}}{{end}}' $c` echo " + Backing up container $c (running docker image $IMAGE)" FILENAME=${TIMESTAMP}_${c}_env.txt echo " +--> backing up environment variables to file: $FILENAME" echo $ENVIRONMENT > $FILENAME for v in $VOLUMES; do FILENAME=${TIMESTAMP}_${c}_volume_${v}.tar.gz echo " +--> backing up volume: $v to file: $FILENAME" docker run --rm -it -v $v:/IN:ro -v `pwd`:/OUT bash tar -C /IN -czf /OUT/$FILENAME . done COUNT=0 for b in $BINDS; do ((COUNT++)) FILENAME=${TIMESTAMP}_${c}_bind_${COUNT}.tar.gz if [[ -d "$b" ]] then echo " |--> backing up bind (directory) ($COUNT): $b to file: $FILENAME" docker run --rm -it -v $b:/IN:ro -v `pwd`:/OUT bash tar -C /IN -czf /OUT/$FILENAME . fi if [[ -f "$b" ]] then echo " |--> backing up bind (file) ($COUNT): $b to file: $FILENAME" docker run --rm -it -v $(dirname $b):/IN:ro -v `pwd`:/OUT bash tar -C /IN -czf /OUT/$FILENAME $(basename $b) fi done echo '' done