166 lines
3.5 KiB
Markdown
166 lines
3.5 KiB
Markdown
# Docker Compose Auto-Updater
|
|
|
|
Dieses Script überprüft mehrere Docker-Compose-Stacks auf Image-Updates und aktualisiert diese automatisch.
|
|
|
|
## 🚀 Features
|
|
|
|
- 🔄 Stack-basiertes Update
|
|
- 🧪 Dry-Run Modus
|
|
- 📲 ntfy Benachrichtigungen
|
|
- ⏭️ Exclude-Liste für ganze Stacks oder einzelne Container
|
|
|
|
---
|
|
|
|
## 📂 Voraussetzungen
|
|
|
|
- Docker + Docker Compose (v2)
|
|
- Bash
|
|
- Optional: ntfy Server
|
|
|
|
---
|
|
|
|
## ⚙️ Konfiguration (`config.conf`)
|
|
|
|
```bash
|
|
# =============================
|
|
# =============================
|
|
# Pfade
|
|
# =============================
|
|
|
|
# Pfad zu deinen Compose-Files
|
|
COMPOSE_DIR="/pfad/zu/deinen/stacks"
|
|
# Logging
|
|
LOG_FILE="/pfad/zum/log/update.log"
|
|
LOG_LEVEL="INFO" # DEBUG=sehr detailliert, INFO=Standard, WARN=nur wichtige Hinweise/Updates, ERROR=nur Fehler
|
|
|
|
# Dateimuster
|
|
COMPOSE_PATTERN="docker-compose.yml"
|
|
|
|
# =============================
|
|
# =============================
|
|
# Allgemein Einstellungen
|
|
# =============================
|
|
|
|
# Verhalten bei gestoppten Containern
|
|
UPDATE_STOPPED=true # Image aktualisieren
|
|
START_STOPPED=false # danach NICHT starten
|
|
|
|
# Dry Run (true/false)
|
|
DRY_RUN=false
|
|
|
|
# =============================
|
|
# =============================
|
|
# Exclude
|
|
# =============================
|
|
|
|
# Exclude Container
|
|
EXCLUDE_SERVICES=(
|
|
"example_container_1"
|
|
"example_container_2"
|
|
)
|
|
|
|
# Exclude Stack
|
|
EXCLUDE_STACKS=(
|
|
"example_stack_1"
|
|
"example_stack_2"
|
|
)
|
|
|
|
# =============================
|
|
# =============================
|
|
# NTFY
|
|
# =============================
|
|
NTFY_ENABLED=true
|
|
NTFY_TITLE="Docker Update ($(hostname))"
|
|
NTFY_TOKEN="DEIN_TOKEN"
|
|
NTFY_URL="https://ntfy.example.com/topic"
|
|
NTFY_TAGS="docker,update"
|
|
NTFY_ONLY_ON_CHANGES=false
|
|
# Versions Nr. anzeigen (true/false)
|
|
SHOW_VERSIONS=true
|
|
|
|
# =============================
|
|
# =============================
|
|
# Docker Cleanup
|
|
# =============================
|
|
|
|
ENABLE_CLEANUP=true
|
|
CLEANUP_ONLY_ON_UPDATE=true
|
|
|
|
# Images:
|
|
# 🟢 dangling → docker image prune (nur <none> Images)
|
|
# 🟡 unused → docker image prune -a (alle ungenutzten Images)
|
|
CLEANUP_IMAGES=true
|
|
CLEANUP_IMAGES_MODE="unused" # dangling | unused
|
|
|
|
# Container:
|
|
# entfernt gestoppte Container
|
|
# 🟢 docker container prune
|
|
CLEANUP_CONTAINERS=true
|
|
|
|
# Volume:
|
|
# entfernt ungenutzte Volumes
|
|
# ⚠️ kann Daten löschen
|
|
CLEANUP_VOLUMES=false
|
|
|
|
# Networks:
|
|
# entfernt ungenutzte Netzwerke
|
|
# 🟢 meist unkritisch
|
|
CLEANUP_NETWORKS=true
|
|
|
|
# =============================
|
|
```
|
|
|
|
---
|
|
|
|
## ▶️ Nutzung
|
|
|
|
```bash
|
|
chmod +x script.sh
|
|
./script.sh
|
|
```
|
|
|
|
---
|
|
|
|
## 🧠 Funktionsweise
|
|
|
|
1. Alle `docker-compose.yml` Dateien werden gefunden
|
|
2. Alphabetisch sortiert
|
|
3. Jeder Stack wird geprüft:
|
|
- Image wird gepullt
|
|
- Vergleich: Container Image-ID vs. aktuelles Image
|
|
4. Wenn ein Service ein Update hat:
|
|
- kompletter Stack wird neu deployed
|
|
|
|
---
|
|
|
|
## 🔔 ntfy Prioritäten
|
|
|
|
| Zustand | Priorität |
|
|
|----------------------|----------|
|
|
| ✔️ Keine Updates | 1 |
|
|
| 🔄 Updates vorhanden | 3 |
|
|
| ❌ Fehler | 5 |
|
|
|
|
---
|
|
|
|
## 📄 Beispiel Ausgabe
|
|
|
|
```
|
|
→ Prüfe Stack: homepage
|
|
├─ dockerproxy (image)
|
|
└─ homepage (image)
|
|
|
|
→ Prüfe Stack: app
|
|
├─ db (image)
|
|
⬆️ UPDATE
|
|
alt: sha256:abc
|
|
neu: sha256:def
|
|
└─ web (image)
|
|
🔄 Stack wird neu deployt
|
|
```
|
|
|
|
---
|
|
|
|
## ⚠️ Hinweise
|
|
|
|
Wird in einem Stack ein Container aktualisiert, wird anschließend der gesamte Stack neu gestartet, sofern er mehr als einen Container enthält. Dadurch wird sichergestellt, dass alle Abhängigkeiten wieder gemäß der `docker-compose.yml` ausgeführt werden. |