Diese Version (2025/03/28 19:56) wurde bestätigt durch Daniel.Die zuvor bestätigte Version (2025/03/28 19:06) ist verfügbar.Diff

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.

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

# At this Point all Services should be shutdown despite the AIO-Mastercontainer
# while some services tend to hang sometimes, i now want to completely shutdown everything
/home/docker/bin/docker stop -t 180 $(/home/docker/bin/docker ps -a -q)
/home/docker/bin/docker rm $(/home/docker/bin/docker ps -a -q)
# and even kill docker-service and restart again
systemctl --user restart docker
# now, restart first NC-AIO Mastercontainer for further jobs
cd /home/docker/docker_compose/nextcloud_aio
/home/docker/bin/docker compose up -d

# Start the NC-AOI Services by AIO
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.

Frist, create another file in that Directory e.g. /home/docker/docker_compose/backup/docker_backup_cron.sh with the contents:

#!/bin/bash
cd /home/docker/docker_compose/backup
./docker_backup_all.sh> docker_backup_cron.log 2>&1
cat docker_backup_cron.log

Use crontab -e to create the cronjob for user docker on your host:

0 3 * * * /home/docker/docker_compose/backup/docker_backup_cron.sh

Thats all. Make sure, you recieve Mails for this user.

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.

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • content/serverbasics/docker-backup.txt
  • Zuletzt geändert: 2025/03/28 19:09
  • von Daniel