.
This commit is contained in:
28
README.md
28
README.md
@@ -6,19 +6,19 @@
|
||||
|
||||
---
|
||||
|
||||
Dieses Script überprüft mehrere Docker-Compose-Stacks auf Image-Updates und aktualisiert diese automatisch.
|
||||
> 🔧 Automatisches Update von Docker-Compose-Stacks mit feingranularer Steuerung per Labels
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- 🔄 Stack-basiertes Update
|
||||
- 🔄 **Stack-basiertes Update**
|
||||
Aktualisiert komplette Docker-Compose Stacks strukturiert und kontrolliert
|
||||
- 🧪 Dry-Run Modus
|
||||
- 🧪 **Dry-Run Modus**
|
||||
Zeigt an, was passieren würde, ohne Änderungen durchzuführen
|
||||
- 📲 ntfy Benachrichtigungen
|
||||
- 📲 **ntfy Benachrichtigungen**
|
||||
Push-Notifications über ntfy bei Updates, Fehlern oder Status
|
||||
- ⚙️ Service-Modi (per Label steuerbar)
|
||||
- ⚙️ **Service-Modi** (per Label steuerbar)
|
||||
Einzelne Container oder komplette Stacks gezielt vom Update ausschließen
|
||||
- 🗑️ Prune Funktion
|
||||
- 🗑️ **Prune Funktion**
|
||||
Entfernt nicht mehr benötigte Images/Container automatisch
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ Entfernt nicht mehr benötigte Images/Container automatisch
|
||||
- Compose-Konfiguration wird ausgewertet (`docker compose config`)
|
||||
- Services und deren Images werden ermittelt
|
||||
- Für jedes Image:
|
||||
- Image wird (einmal pro Stack) gepullt (`docker pull`, nutzt Cache)
|
||||
- Image wird bei Bedarf gepullt (maximal einmal pro Image und Stack, Cache-basiert)
|
||||
- Lokale Image-ID wird ermittelt
|
||||
- Image-ID des vorhandenen Containers wird ermittelt (auch für gestoppte Container)
|
||||
4. Entscheidungslogik:
|
||||
@@ -59,9 +59,12 @@ Entfernt nicht mehr benötigte Images/Container automatisch
|
||||
6. Sonderverhalten:
|
||||
- Gestoppte Container werden ebenfalls geprüft und bei Updates berücksichtigt
|
||||
- Gestoppte Container werden nach dem Update optional wieder gestoppt
|
||||
- Excluded Services werden gepullt, aber **nicht** neu gestartet.
|
||||
Verfügbare Updates werden erkannt und per NTFY gemeldet.
|
||||
- Healthchecks können optional abgewartet werden
|
||||
- Service-Verhalten wird vollständig über Labels gesteuert (`composeupdater.mode`)
|
||||
- Je nach Modus werden Services:
|
||||
- komplett ignoriert (`ignore`)
|
||||
- nur überwacht (`notify-only`)
|
||||
- oder automatisch aktualisiert (`update`)
|
||||
|
||||
|
||||
---
|
||||
|
||||
@@ -139,7 +142,7 @@ services:
|
||||
- composeupdater.mode=update
|
||||
```
|
||||
|
||||
#### 📦 Stack-Level Label (optional)
|
||||
#### 📦 Stack-Level Label
|
||||
|
||||
Du kannst das Verhalten auch für den gesamten Stack setzen:
|
||||
|
||||
@@ -147,6 +150,9 @@ Du kannst das Verhalten auch für den gesamten Stack setzen:
|
||||
labels:
|
||||
- composeupdater.mode=ignore
|
||||
```
|
||||
Das Stack-Level Label definiert den Standard für alle Services im Stack
|
||||
Service-Labels können diesen Standard überschreiben
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -298,12 +298,6 @@ while IFS= read -r -d '' file; do
|
||||
|
||||
stack_mode=$(get_stack_mode)
|
||||
|
||||
if [ "$stack_mode" = "ignore" ]; then
|
||||
log INFO "→ Stack $stack übersprungen (label=ignore)"
|
||||
cd "$PATH_COMPOSE_DIR"
|
||||
continue
|
||||
fi
|
||||
|
||||
mapfile -t services < <(docker compose config --services)
|
||||
total_services=${#services[@]}
|
||||
current_index=0
|
||||
@@ -336,8 +330,16 @@ while IFS= read -r -d '' file; do
|
||||
continue
|
||||
fi
|
||||
|
||||
# =============================
|
||||
# Mode bestimmen (Service > Stack)
|
||||
# =============================
|
||||
|
||||
mode=$(get_service_mode "$svc")
|
||||
|
||||
if [ -z "$mode" ]; then
|
||||
mode="$stack_mode"
|
||||
fi
|
||||
|
||||
case "$mode" in
|
||||
|
||||
ignore)
|
||||
@@ -355,6 +357,7 @@ while IFS= read -r -d '' file; do
|
||||
continue
|
||||
fi
|
||||
|
||||
# 👉 Pull nur einmal pro Image
|
||||
if [ -z "${pulled_images[$image]:-}" ]; then
|
||||
pull_with_retry "$image" || true
|
||||
pulled_images[$image]=1
|
||||
@@ -392,8 +395,6 @@ while IFS= read -r -d '' file; do
|
||||
# Pull + Vergleich
|
||||
# =============================
|
||||
|
||||
|
||||
# 👉 Pull (nutzt Cache → schnell wenn nichts neu)
|
||||
if [ -z "${pulled_images[$image]:-}" ]; then
|
||||
if ! pull_with_retry "$image"; then
|
||||
log ERROR " ❌ Pull fehlgeschlagen"
|
||||
@@ -408,7 +409,6 @@ while IFS= read -r -d '' file; do
|
||||
after_id=$(get_local_image_id "$image")
|
||||
|
||||
if ! container_exists "$svc"; then
|
||||
# 👉 Container existiert nicht → KEIN Update
|
||||
update_needed=false
|
||||
|
||||
elif [ "$before_id" != "$after_id" ]; then
|
||||
|
||||
Reference in New Issue
Block a user