Synology: Docker Container automatisch aktualisieren mit Watchtower


WatchTower für Docker Container Aktualisierungen

Hauptsächlich nutze ich mein Synology NAS DS1019+ (kaufen) für Plex und Anwendungen mit Docker. Die Docker-Container enthalten die komplette Anwendung den Minecraft-Server. Um die Anwendungen zu aktualisieren, muss der Docker Container aktualisiert werden.

So aktualisiert man den Docker Container manuell.

Synology Docker Container manuell aktualisieren

Wenn man nur sehr selten seinen Docker Container aktualisieren muss, dann kann man dies wie folgt per Hand erledigen.

  1. Docker im DSM starten
  2. In der Registry die aktuelle Version des Images runterladen.
  3. Vorhandenen Container nun stoppen
  4. Unter „Action“ nun „Clear“ auswählen und bestätigen
  5. Container starten.

Es bleiben alle Einstellungen des Containers erhalten. Solange die Daten per Volume extern auf dem NAS gemountet sind, bleiben diese ebenfalls erhalten. Dieser Prozess ist bei mehr als drei Containern recht lästig. Es geht auch einfacher.

Synology Docker Container automatisch aktualisieren

Watchtower ist ein Docker-Container, der Docker-Container aktualisieren kann. Ich nutze dazu das Docker Image containrrr/watchtower. Für die einfache Einrichtung befolgt man diese Schritte:

  1. Image containrrr/watchtower der Docker Registry runtergeladen.
  2. root-Zugriff per Shell auf das Synology NAS anlegen
  3. Auf Shell folgenden Code ausführen:
docker run -d --network host --name watchtower-once -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower:latest --cleanup --include-stopped --run-once

Nun werden einmalig alle Docker-Container aktualisiert. Der dafür angelegte Container läuft einmal durch und ist danach ausgeschaltet in der Liste der Container in der Synology Docker Applikation zu finden. Nun kann man ihn manuell immer wieder bei Bedarf starten oder per Synology Task Scheduler zu bestimmten Zeiten laufen lassen. Der Befehl für den Task Scheduler ist dann folgender:

docker start watchtower-once -a

Watchtower permanent laufen lassen

Alternativ kann man auch den Scheduler in Watchtower selber nutzen. Wenn man ihn immer mittwoch morgen um 7 Uhr starten möchte, dann gibt man folgenden Befehl auf der Shell ein:

docker run -e "TZ=Europe/Berlin" -d --restart unless-stopped --network host --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --include-stopped --schedule "0 7 * * 3"

Wichtig ist hierbei die Timezone auf „Europe/Berlin“ zu stellen, da man sonst einen Versatz von 2 Stunden hat. Zusätzlich wird der Container nicht beendet, sondern immer wieder neugestartet. Auch wenn er mal abgestürzt ist oder das NAS neugestartet wurde. Der letzte Parameter nutzt die cron-Syntax für das Planen des Tasks.

Das DS1019+ (kaufen) mit Docker-Unterstützung

Synology als Docker Server

Mit diesem Setup ist ein Synology NAS ein echter Anwendungsserver. Docker-Unterstützung bekommt man schon für wenig Geld mit dem DS218+ (kaufen). Es muss nicht immer das teure DS1019+ (kaufen) sein. Für mehr Geschwindigkeit kann man noch über eine SSD im Synology NAS nachdenken.


Beitrag veröffentlicht

in

,

von

Schlagwörter:

Kommentare

21 Antworten zu „Synology: Docker Container automatisch aktualisieren mit Watchtower“

  1. Avatar von Jürgen
    Jürgen

    Hallo Marc,
    danke für die Anleitung. Die Punkte 1-3 habe ich gemacht. Wenn ich
    4. Unter „Action“ nun „Clear“ auswählen und bestätigen
    kommt eine Dialogbox (Deutsch: Aktion, Löschen) sagt er mir „Die folgenden 1 Container werden gelöscht. Alle Daten im Container gehen verloren, wenn er gelöscht wird. Möchten Sie wirklich fortfahren?“ Soll ich das wirklich bestätigen? Sind die Daten dann nicht weg? Danke.

    1. Avatar von Marc
      Marc

      Ich zitiere mich selbst:

      Es bleiben alle Einstellungen des Containers erhalten. Solange die Daten per Volume extern auf dem NAS gemountet sind, bleiben diese ebenfalls erhalten.

  2. Avatar von Bernd
    Bernd

    Hallo,
    man sollte noch die Timezone ergänzen (-e „TZ=Europe/Berlin“). Sonst hat man Abweichungen beim Scheduler von bis zu 2 Stunden. Je nach Jahreszeit.
    Daher wäre mein Vorschlag:
    docker run -e „TZ=Europe/Berlin“ -d –restart unless-stopped –network host –name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower –cleanup –include-stopped –schedule „0 0 7 ? * WED“

    Grüße,
    Bernd

    1. Avatar von Marc
      Marc

      Done. Danke!

  3. Avatar von Paul
    Paul

    I’m getting an error message when running the schedule command:
    docker run -e „TZ=Europe/Berlin“ -d –restart unless-stopped –network host –name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower –cleanup –include-stopped –schedule „0 0 7 ? * WED“

    docker: invalid reference format.

    Comparing the code for „run once“ vs using the schedule command line, I noticed differences in the syntax: for example, double „–“ attributes…and when I selected „docker run –help“, I also noticed that „-schedule“ doesn’t appear as an attribute in the help.
    Is it wrong?
    I’m in AUS / MELB, so not sure if the timezone is screwing things up?

    1. Avatar von Marc
      Marc

      The command included no well-formatted chars. Sorry for that. It is fixed now.

  4. Avatar von vepman
    vepman

    Klasse, habe ich gleich mal installiert.

  5. Avatar von Christian
    Christian

    Hallo Marc,
    an was liegt es wenn Synology meldet „container wurde unerwartet beendet“?
    Kann das der Fall sein wenn alles „uptodate“ ist ? nach 5sec bricht mir der watchtower immer ab…
    Das hatte ich so noch nie oder ich habe immer dann angestoßen wenn es updates gab?
    oder was kann daran schuld sein? geändert habe ich nichts

    1. Avatar von Marc
      Marc

      Das ist, denke ich, normal. Aber schau doch ins log.

  6. Avatar von Christoph Quadt
    Christoph Quadt

    Hallo,
    super Anleitung, vielen Dank.
    Ich habe das Problem, dass der Container versucht, sein eigenes Image upzudaten, also vom Watchtower :) Das geht nicht, da er sich nicht selbst beenden und updaten kann, daher schlägt das fehl.
    Wie gehe ich da vor?

    Viele Grüße

  7. Avatar von Andreas
    Andreas

    Danke für die tolle Anleitung. Leider habe ich bemerkt, dass die Einstellungen vom Container nicht übernommen werden, also z.B. die erstellen Folder Links. Das führt dazu, dass die Container dann eigentlich nicht mehr vernünftig genutzt werden können, außer man adaptiert das dann wieder manuell.

    Beim Unifi Docker habe ich leider festgestellt, dass nach einem Update das Adoptieren der Devices nicht mehr möglich ist. Dort ist es zwingend nötig, zuerst die Devices freizugeben und dann erst zu aktualisieren. Fürchte, das lässt sich auch nicht wirklich automatisieren.

    1. Avatar von Marc
      Marc

      Was meinst Du mit „übernommen“? Alles funktioniert so wie es soll, wenn man sich an die Anleitung hält. Da wird alles auf die Platte gespeichert.

  8. Avatar von Malte
    Malte

    Moin Marc,
    Danke für die Anleitungen.

    Ich nutze sowohl deinen Minecraft-Server als Docker Image als auch Watchtower.

    Watchtower wird bei mir einmal täglich morgens um 5:00 Uhr über den Aufgabenplaner der DiskStation gestartet und updatet dann die Container wenn Updates zur Verfügung stehen.

    Der marctv/minecraft-papermc-server (latest) wird aber jedesmal gestoppt und „aktualisiert“.
    Auch wenn ich zwischendurch manuell Watchtower starte passiert das – allerdings nur bei diesem einen Container.
    Im Prinzip kann es mir zwar egal sein, um 5:00 Uhr schlafe ich in aller Regel, aber etwas merkwürdig ist das schon.

    Hast du eine Erklärung dafür?
    Ich habe Watchtower auch schon neu eingerichtet (nach deiner Anleitung) und komme zum selben Ergebnis.

    Viele Grüße,
    Malte

    1. Avatar von Marc
      Marc

      Damit ein Container aktualisier werden kann muss er Neugestartet werden. Da führt kein Weg dran vorbei.

    2. Avatar von Malte
      Malte

      Ich glaube, ich habe mich blöd ausgedrückt: der Minecraft-Container wird IMMER von Watchtower aktualisiert. Bei jedem Durchlauf. Ich kann also Watchtower mehrfach hintereinander starten und dieser Eine Container wird immer „aktualisiert“ obwohl du vermutlich nicht jeden Tag über Wochen das Image aktualisierst.

    3. Avatar von Marc
      Marc

      Also das kann schon sein. Das passiert ja alles automatisch. Ich glaube, ich habe da extra etwas eingebaut, dass der Container sich komplett neu baut. Ich kann mal gucken, ob das so sinnvoll ist wie ich das gemacht habe aber das ist bei mir auch so.

    4. Avatar von Malte
      Malte

      Ok.
      Ne, dann passt das schon. Ich war mir nur nicht sicher, ob ich doch noch irgendwas falsch gemacht habe und es war halt schon irgendwie auffällig.

      Nachteile hat es nicht.

      Danke für die Rückmeldung.
      Der nächste Kaffee geht auf mich! :-)

  9. Avatar von Andreas
    Andreas

    Hallo, auch wenn die Linuxer jetzt wieder lachen… SSH wird nur zum Einrichten gebraucht, ich kann also SSH nach dem Setup wieder deaktivieren, oder?

  10. Avatar von Hendrik
    Hendrik

    Hallo, vielen Dank erstmal für das Docker-Image, hat den Kindern und mir in den letzten Wochen viel Spaß bereitet. Ich bekomme seit dem Android-MC-Update vom 21. April (Version 1.16.221.01) die Meldung „Server veraltet“ wenn ich versuche auf den Server zuzugreifen. Ich denke es ist also Zeit das Image manuell zu aktualisieren – beim Schritt „Unter „Action“ nun „Clear“ auswählen“ sind in der deutschen Version die unteren 2(!) Einträge „Löschen“ (unterhalb von „Stopp erzwingen“). Der erste führt zu „Container werden entfernt“, der zweite zu „Container werden gelöscht“. Ich vermute mal der erste Eintrag ist gemeint (entfernen), oder?

    1. Avatar von Marc
      Marc

      Habe ich auch gerade gesehen. Ich würde auf englisch schalten. Denn „clear“ ist nicht dasselbe wie löschen.

    2. Avatar von Hendrik
      Hendrik

      Sprachumstellung DE-EN war einfacher als erwartet. Das erste „Löschen“ wird wie vermutet zu „Clear“, das zweite zu „Delete“. MC-Server redet wieder mit den Clients, danke.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert