2026-03-29 19:19:13 +02:00
2026-03-29 12:42:13 +02:00
2026-03-29 12:42:13 +02:00
.
2026-03-29 18:51:16 +02:00
.
2026-03-29 18:51:16 +02:00
.
2026-03-29 18:51:16 +02:00
.
2026-03-29 19:19:13 +02:00

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
  • 🗑️ Prune Funktion

📂 Voraussetzungen

  • Docker + Docker Compose (v2)
  • Bash
  • Optional: ntfy Server

⚙️ Konfiguration (config.conf)

# =============================
# =============================
#            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_IMAGE_URL="http://dein-server/host-icon.png"
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

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

🗑️ Prune / Cleanup

Nach Abschluss der Updates kann optional ein Docker Cleanup durchgeführt werden. Dabei werden ungenutzte Ressourcen entfernt:

  • docker image prune
    → entfernt ungenutzte („dangling“) Images

  • docker image prune -a
    → entfernt alle Images, die von keinem Container verwendet werden

  • docker container prune
    → entfernt gestoppte Container

  • docker volume prune
    → entfernt ungenutzte Volumes

  • docker network prune
    → entfernt ungenutzte Netzwerke


🔔 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.

Description
No description provided
Readme 746 KiB
Languages
Shell 100%