This version (2025/03/26 17:36) was approved by obel1x.Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Docker: Backup
In this Chapter we will Backup the Docker- Volumes and the Data of the home- Directory of Docker, that is important. We will NOT do a full Backup of the Server, while Docker can only archive what is accessable by the user docker (rootless!).
Further we will need a working Nextcloud- AIO with working Nextcloud- Backup preconfigured - so if you have not set up NC-AIO, start there.
The benefit of this is, that all the contents of docker will be backed up with the right acces-rights and configurations an we can rely on the functionality of NC-AIO here.
Setup Scripts
Create the Directory for your Backup- Scripts, e.g. /home/docker/docker_compose/backup
Inside that directory, create a file named „additional_backup_directories_initial“ and insert the content:
/home/docker/docker_compose /home/docker/.config /home/docker/.docker /home/docker/bin
These are the basic Directories of the User.
Than, create a script named „docker_backup_all.sh“, make it executable an insert the Content:
#!/bin/bash
# Will make a Backup of Docker and all Volumes by calling NC-AIO Backup
DIRECTORYFILE='additional_backup_directories'
#Services and order to stop
declare -a SERVICE=("caddy" "ipa" "mariadb" "portainer")
# Set working dir
cd /home/docker/docker_compose/backup
# Get all Directories to backup
cat ${DIRECTORYFILE}_initial> ${DIRECTORYFILE}
find "/home/docker/.local/share/docker/volumes" -maxdepth 1 -type d | grep pcserver2023>> ${DIRECTORYFILE}
# TODO: remove Database- Directories
# Copy the file to NC-AIO
echo "The following Directories will be backup up ADDITIONALLY to Nextcloud AIO:"
cat ${DIRECTORYFILE}
docker cp ${DIRECTORYFILE} nextcloud-aio-mastercontainer:/mnt/docker-aio-config/data
docker exec nextcloud-aio-mastercontainer chown www-data:www-data /mnt/docker-aio-config/data/additional_backup_directories
docker exec nextcloud-aio-mastercontainer chmod o+r /mnt/docker-aio-config/data/additional_backup_directories
# Now stop all containers NOT beeing part of NC
for i in "${SERVICE[@]}"; do
echo "Stopping $i"
cd /home/docker/docker_compose/$i
docker compose down
sleep 1
done
echo "Now backup is done by AIO"
docker exec -it --env DAILY_BACKUP=1 nextcloud-aio-mastercontainer /daily-backup.sh
echo "The Log is:"
docker logs nextcloud-aio-borgbackup
# And start the Containers
sleep 2
docker exec -it --env START_CONTAINERS=1 nextcloud-aio-mastercontainer /daily-backup.sh
# Start Services in reverse order
for ((i=${#SERVICE[@]}-1; i>=0; i--)); do
echo "Starting ${SERVICE[i]}"
cd /home/docker/docker_compose/${SERVICE[i]}
docker compose up -d
sleep 1
done
Thats the whole Backup-Script.
Cronjob
Use crontab -e to create the cronjob for user docker on your host:
0 1 * * * /home/docker/docker_compose/backup/docker_backup_all.sh
UserIDs in the Borg-Backups
Mind, that Borg will store the UID/GID of some file/directory from inside running docker- container. That means, that if the file on the host has some SubUID, like e.g. UID = 165568, the file seen from inside the container can be UID = 33, which could be the container- user named „www-data“.
So you cannot restore the Files on your Host an hope, that this will work. To restore these archives, you need (again) a running Nextcloud- AIO and restore the files from that borg- container, that is included there.
