Simple Docker volumes backup tool
This script queries the available docker containers on a machine, stops them, creates backups of their volumes and starts the containers again.
The script relies on jq
, gzip
, curl
and tar
. It can send notifications to a Gotify server.
./backup_docker.sh [options]
Usage examples:
./backup_docker.sh --help
./backup_docker.sh --template
./backup_docker.sh --backup /home/user/backup_config.json
Options:
-h, --help
print this help and exit
-t, --template
print a backup config template structure with locally found docker containers
-b config, --backup config
perform backup with configuration
An initial configuration can be automatically generated by invoking the script with the option -b <configfile>
. The configuration must be edited to specify
- the backup base directory (output of the script containing the backup zips),
- the different storage directories (input for the script)
- additionally, the notification section that allows the script to report the results. Possible options are gotify and console output
{
"created": "2024-04-21 14:35:02",
"backup_base_dir": "/home/user/docker/backups",
"backup_items": [
{
"name": "heimdall",
"id": "1153e2a7b0c6",
"image": "lscr.io/linuxserver/heimdall:latest",
"state": "running",
"storage_dir": "/home/user/docker/heimdall/volume"
},
...
],
"notification": {
"type": "gotify",
"url": "http://my-gotify-server:88",
"token": "mytoken"
}
}
INFORMATION: Please note that the script must be run as root as it calls docker for controlling the starting, stopping and querying the docker containers.
The script can be placed anywhere in the file system. It can be invoked at given times / cycles with a cronjob, see example below.
This configuration starts a backup every day at 01:00 o'clock:
0 1 * * * /bin/bash /home/user/scripts/backup_docker.sh -b /home/user/scripts/backup_config.json