Naposledy aktivní 1721403897

Migrates one docker volume to another host

gistfile1.txt Raw
1#!/bin/bash
2
3# Environment check
4
5# If migrating from localhost, set this to localhost
6if [[ ! $SOURCE_HOST_ADDRESS ]]
7then
8 echo "Please set the current host address in SOURCE_HOST_ADDRESS"
9 exit 1
10fi
11
12# If migrating from localhost, set this to $USER
13if [[ ! $SOURCE_HOST_USER ]]
14then
15 echo "Please set the current host user in SOURCE_HOST"
16 exit 1
17fi
18
19# If migrating to localhost, set this to localhost
20if [[ ! $TARGET_HOST_ADDRESS ]]
21then
22 echo "Please set the new host address in TARGET_HOST_ADDRESS"
23 exit 1
24fi
25
26# If migrating to localhost, set this to $USER
27if [[ ! $TARGET_HOST_USER ]]
28then
29 echo "Please set the new host user in TARGET_HOST_USER"
30 exit 1
31fi
32
33# Argument check
34
35if [[ ! $1 ]]
36then
37 echo "Please supply a docker volume name, as displayed by the command 'docker volume ls'"
38 exit 1
39fi
40volume_name=$1
41
42# Export the volume from the current instance
43
44echo "Exporting volume $volume_name on $SOURCE_HOST_ADDRESS"
45ssh "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS" "\
46mkdir -p \$HOME/docker-volume-backup
47docker run \
48 --rm \
49 -v $volume_name:/volume-backup-source \
50 -v \$HOME/docker-volume-backup:/volume-backup-target \
51 busybox \
52 sh -c 'cd /volume-backup-source && tar cf /volume-backup-target/backup.tar .' \
53"
54
55
56# Transfer the exported volume to the new address
57
58echo "Transferring exported volume $volume_name from $SOURCE_HOST_ADDRESS to $TARGET_HOST_ADDRESS"
59ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "mkdir -p \$HOME/docker-volume-backup"
60scp -3 "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS":./docker-volume-backup/backup.tar \
61 "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS":./docker-volume-backup/backup.tar
62
63
64# Restore the backup
65
66echo "Creating volume $volume_name on $TARGET_HOST_ADDRESS"
67ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "\
68docker volume create $volume_name \
69&& docker run \
70 --rm \
71 -v $volume_name:/volume-backup-target \
72 -v \$HOME/docker-volume-backup/:/volume-backup-source \
73 busybox \
74 sh -c 'cd /volume-backup-target && tar xf /volume-backup-source/backup.tar .' \
75"
76
77# Clean up residual files
78
79echo "Cleaning up unnecessary files"
80ssh "$SOURCE_HOST_USER"@"$SOURCE_HOST_ADDRESS" "rm -rf \$HOME/docker-volume-backup"
81ssh "$TARGET_HOST_USER"@"$TARGET_HOST_ADDRESS" "rm -rf \$HOME/docker-volume-backup"
82
83echo "Successfully migrated docker volume $volume_name from $SOURCE_HOST_ADDRESS to $TARGET_HOST_ADDRESS"