
In diesem Beitrag zeige ich, wie man mit einem schlanken Alpine-basierten Docker-Container vollautomatische Backups von Dateien und Datenbanken durchführt. Perfekt für Self-Hosting, kleine Unternehmen oder professionelle Docker/Portainer-Umgebungen.
Was wird also gebraucht?
- Ein bestehenden Docker Compose Stack
- Backup-Quellen (Verzeichnisse, DB-Zugang)
- Optional: Nextcloud mit Talk-Bot (über
occ talk:bot:install
eingerichtet) - Optional: SMTP-Zugang (z. B. Mailserver oder SMTP-Dienst)
Beispiel docker-compose.yml
services: web: ... db: ... backup: image: onesystems/dockerbackup:latest restart: unless-stopped environment: BACKUP_NAME: "web-backup-db" STACK_NAME: "Production" FILES_TO_BACKUP: "/data" BACKUP_DIR: "/backup" LOG_DIR: "/log" RETENTION_DAYS: 30 CRON_SCHEDULE: "0 * * * *" DB_TYPE: "postgres" POSTGRES_HOST: "postgres" POSTGRES_USER: "backupuser" POSTGRES_PASSWORD: "secret" POSTGRES_DATABASE: "myapp" NC_TALK_NOTIFY: "off" NC_TALK_URL: "https://cloud.example.com" NC_TALK_BOT_CHANNEL: "abc123" NC_TALK_BOT_SECRET: "your_shared_hmac_secret" EMAIL_NOTIFY: "off" EMAIL_TO: "alerts@example.com" EMAIL_FROM: "backup@host.local" SMTP_SERVER: "smtp.example.com" SMTP_PORT: 587 SMTP_USER: "smtp-user" SMTP_PASS: "smtp-pass" SMTP_TLS: "on" volumes: - ./data:/data - ./backup:/backup - ./log:/log depends_on: - db healthcheck: test: ["CMD", "/scripts/healthcheck.sh"] interval: 5m timeout: 10s retries: 3 start_period: 30s
Alle Optionen sind auf der Docker Hub Seite detailliert beschrieben:
https://hub.docker.com/repository/docker/onesystems/dockerbackup/general
Optional: Nextcloud Talk Bot
Wenn man zusätzlich zu E-Mail auch in ein eigenen Nextcloud Talk Unterhaltung schreiben möchte (was wir mit Checkmk z.B. auch bereits machen), kann dies auch aktivieren damit man stets auf dem laufenden bleibt wenn etwas nicht wie erwartet durchläuft.
Dafür muss man einen neuen Talk Bot erstellen (geht nur über die Kommandozeile):
php occ talk:bot:install --feature message "Docker" https://meine.nextcloud.local/ocs/v2.php/apps/spreed/api/v1/bot/docker
Der Name „Docker“ sowie in der Url „/docker“ kann frei gewählt werden
Nach dem erstellen muss man den im Talk Fenster noch bei der entsprechenden Unterhaltung hinzufügen.
Docker Logs
_______ _______ __ | |.-----.-----.| __|.--.--.-----.| |_.-----.--------.-----. | - || | -__||__ || | |__ --|| _| -__| |__ --| _____|_______||__|__|_____||_______||___ |_____||____|_____|__|__|__|_____|______________________ |_____| [2025-04-30 17:55:43] 📋 Crontab created [2025-04-30 17:55:43] ⏳ Starting initial backup in 10 seconds... [2025-04-30 17:55:43] 🕒 Starting cron service... [2025-04-30 17:55:53] 🚀 Running initial backup... [2025-04-30 17:55:53] 🔄 Starting backup... [2025-04-30 17:56:00] ✅ File backup completed: /backup/2025-04/files_media_2025-04-30_1755.tar.gz [2025-04-30 17:56:01] ✅ File backup completed: /backup/2025-04/files_certs_2025-04-30_1755.tar.gz [2025-04-30 17:56:02] ✅ File backup completed: /backup/2025-04/files_templates_2025-04-30_1755.tar.gz [2025-04-30 17:56:04] ✅ File backup completed: /backup/2025-04/files_redis_2025-04-30_1755.tar.gz [2025-04-30 17:56:04] 🔍 Starting PostgreSQL backup... [2025-04-30 17:56:06] ✅ PostgreSQL backup completed: /backup/2025-04/postgres_authentik_2025-04-30_1755.sql.gz [2025-04-30 17:56:06] 🧹 Removing backups older than 30 days... [2025-04-30 17:56:06] 🎉 Backup completed successfully [2025-04-30 17:56:06] ✅ Initial backup completed
Fazit
Mit diesem Setup lassen sich Docker-Backups nicht nur automatisieren, sondern auch professionell überwachen und benachrichtigen. Ideal für produktive Umgebungen mit vielen Containern.