Docker Compose v2 wird von den Docker-Maintainern regelmäßig aktualisiert – neue Features, Bugfixes, gelegentlich auch sicherheitsrelevante Patches. Wer Compose manuell als CLI-Plugin installiert hat, muss die Releases auf GitHub selbst im Blick behalten. Das lässt sich mit einem kleinen Bash-Script und einem Cronjob vollständig automatisieren.
Wichtig zu wissen
Docker Compose v2 ist ein reines CLI-Plugin und kein Bestandteil des Docker-Daemons. Ein Neustart des docker-Service ist für ein Compose-Update also technisch nicht erforderlich. Im Script unten ist der Neustart trotzdem als optionaler Schritt enthalten – zum Beispiel für den Fall, dass man ihn im selben Wartungsfenster ohnehin durchführen möchte.
Das Update-Script
Das Script prüft die aktuell installierte Version, vergleicht sie mit dem neuesten GitHub-Release und ersetzt das Binary nur, wenn tatsächlich ein Update ansteht.
#!/usr/bin/env bash
set -euo pipefail
# Pfad, unter dem Docker das Compose-Plugin sucht
INSTALL_DIR="/usr/local/lib/docker/cli-plugins"
BINARY="$INSTALL_DIR/docker-compose"
LOGFILE="/var/log/docker-compose-update.log"
ARCH="$(uname -m)"
OS="linux"
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') $*" | tee -a "$LOGFILE"; }
# Aktuell installierte Version ermitteln (falls vorhanden)
if [ -x "$BINARY" ]; then
CURRENT_VERSION="$("$BINARY" version --short 2>/dev/null || echo "unbekannt")"
else
CURRENT_VERSION="nicht installiert"
fi
# Neueste Release-Version über GitHub API abfragen
LATEST_VERSION="$(curl -fsSL https://api.github.com/repos/docker/compose/releases/latest \
| grep -oP '"tag_name":\s*"\K[^"]+')"
if [ -z "$LATEST_VERSION" ]; then
log "Fehler: Konnte neueste Version nicht von GitHub abrufen."
exit 1
fi
log "Installiert: $CURRENT_VERSION | Verfügbar: $LATEST_VERSION"
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
log "Bereits aktuell, kein Update nötig."
exit 0
fi
log "Update wird durchgeführt..."
DOWNLOAD_URL="https://github.com/docker/compose/releases/download/${LATEST_VERSION}/docker-compose-${OS}-${ARCH}"
mkdir -p "$INSTALL_DIR"
TMP_FILE="$(mktemp)"
if ! curl -fsSL "$DOWNLOAD_URL" -o "$TMP_FILE"; then
log "Fehler: Download von $DOWNLOAD_URL fehlgeschlagen."
rm -f "$TMP_FILE"
exit 1
fi
chmod +x "$TMP_FILE"
mv "$TMP_FILE" "$BINARY"
log "docker-compose auf $LATEST_VERSION aktualisiert."
log "Fertig."
Script einrichten
Datei speichern, ausführbar machen und an einen sinnvollen Ort legen:
sudo mv update-docker-compose.sh /usr/local/sbin/update-docker-compose.sh
sudo chmod +x /usr/local/sbin/update-docker-compose.sh
Cronjob einrichten
Crontab von root öffnen:
sudo crontab -e
Folgende Zeile einfügen, um das Script z. B. täglich um 4 Uhr auszuführen:
0 4 * * * /usr/local/sbin/update-docker-compose.sh
Fazit
Mit diesen wenigen Zeilen bleibt Docker Compose auf dem Dockerhost dauerhaft aktuell, ohne dass man die Releases manuell verfolgen muss. Der optionale Neustart des Docker-Service im Script kann bei Bedarf auch entfernt werden, da er für ein reines Compose-Update nicht erforderlich ist.