Docker Container automatisiert aktualisieren

Wer kennt es nicht, je mehr updates man händisch machen muss, desto eher empfindet man sie als nervend und macht sie deshalb nicht. Ein Grund mehr das 0 8 15 Containerupdate im Hintergrund laufen zu lassen.

Wollte man ein Docker Container aktualisieren bedeutet dies: Container duplizieren, alten entfernen, ggfs Ports wieder auf den richtigen Stand bringen da ja keine 2 Container die selben Ports haben dürfen. Starten nicht vergessen.

Das kann man sporadisch mit 1-2 Containern machen aber auch da nervt das schnell.

Es geht besser:

  • Vollautomatisch:

docker run -d --restart unless-stopped --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --include-stopped --schedule "0 0 3 ? * SUN"
  • hier wird jeden Sonntag um 3 Uhr alle Docker Container aktualisiert. Fühlt euch frei die Zeiten nach bedarf zu ändern.

    Definitiv die von Rudi hier empfohlene Variante

  • Semi Automatisch

    Für alle Container:
    docker run -d –name watchtowerjob -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower:latest –cleanup –include-stopped –run-once

    Für ausgewählte Container (in diesen Fall „wusel“ und „dusel“
    docker run -d –name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower:latest –cleanup –include-stopped wusel dusel

    Kleine Anmerkung: Der erste Start dauert ein Moment. Der Container beendet sich wenn er fertig ist.

  • Wir rufen periodisch den Container wie folgt auf:
    docker start watchtowerjob -a

Das könnte man z.b. als Cronjob jede Woche laufen lassen.
Hier noch ein paar erläuterungen was der Befehl oben so macht:

So könnte die Ausgabe dann aussehen
ParameterBedeutung
docker runDocker-Run-Command zum Starten eines Docker-Containers
-dDer Container soll detached (also im Hintergrund) laufen
–name watchtowerjobDer Name des Watchtowercontainers (beliebig)
-v /var/run/docker.sock:/var/run/docker.sockDa docker Container eigentlich abgeschottet sind, müssen wir den docker-socket in den watchtower-container mounten. Sonst hat der Watchtower-Container keinen Zugriff auf die zu überwachenden Cnotainer.
containrrr/watchtower:latestDas image (mit dem latest-Tag) aus dem der Watchtower-Container gebaut wird
–cleanupAlte Images werden gelöscht, nachdem der Container geupdatet worden ist. Ist dieser Parameter nicht gesetzt, bleiben alte Images erhalten und “müllen” so nach und nach das System zu.
–include-stoppedAuch aktuell gestoppte Container sollen in das Update einbezogen werden.
–run-onceSorgt dafür, dass der Container nur einmal ausgeführt wird.

Getestet mit DSM 7 (Linux DiskStation 3.10.108 #41890 SMP Fri Jun 25 02:40:49 CST 2021 x86_64 GNU/Linux synology_avoton_1517+)