blob: a9217953baeff3219773c1c4b30e1e273fcd73ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#!/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
|