Update von laufenden/bereits bestehenden Containern (docker pull)

  • Hallo zusammen,


    ich habe ja einige Container am Laufen. Nun frage ich mich, gibt es eigentlich eine Möglichkeit die bereits bestehenden Container upzudaten ohne diese komplett neu anlegen und durchkonfigurieren zu müssen?

    in der Container Station gibt es unter Images ja den "Pull"-Button. Nur leider tut sich da nach Eingabe des Docker-Imagenamen zB.: grafana:grafana -> latest rein gar nichts.

    Versteh ich da irgendetwas falsch?


    Danke schon mal.

  • Versteh ich da irgendetwas falsch?

    Ja genau. (Docker) Container sind durch ihre Beschaffenheit nicht dafür gedacht aktualisiert zu werden. Stattdessen wirft man den "alten" Container weg und erstellt einen neuen. Das ist auch der Grund, warum man persistente Daten nicht im Container selbst sonder ausßerhalb, in sogenannten Volumes, speichern soll. Die Konfiguration ändert sich ja bei einem Neuen Container nicht. Zumindest nicht, wenn du ihn mit den gleichen Parametern startest.

  • Hi Tuxflo,


    ja soweit ist mir das schon bekannt. mir geht es ja darum, dass ich den bestehenden runterfahre/zerstöre und einen neuen lade und wieder hochfahre. Aber mit bestehender Config aus der Container Station.


    Was ich mir sparen will ist jedes mal das Geklickse durch die Container Config. Also:

    Persistenten Speicher festlegen, MAC-Adresse fixieren, Ressourcen Zuordnung einstellen, etc. ...

  • Wenn du dir das ersparen willst, dann empfehle ich dir den Container einfach via Kommandozeile (ssh) zu starten. Alle Sachen die du in der GUI einstellst bilden im Hintergrund einen docker run Befehl mit den entsprechenden Parametern.


    Dort führst du dann einmal den docker pull Befehl aus um das neue Image herunterzuladen und dann einfach den docker run Befehl mit den entsprechenden Parametern. Wenn du dir die History Datei zwischendurch wegkopierst hast du den entsprechenden Aufruf auch nach einem NAS Neustart (andernfalls geht die History nach einem Neustart verloren).


    Falls du das Ganze für viele Container betreiben willst, kannst du dir auch mal "Docker Watchtower" anschauen. Das ist ein Tool, was die Wartung von Containern übernimmt (habe ich aber selbst noch nicht getestet, da sich meine Container selten aktualisieren).


    Eine weitere Möglichkeit wäre, statt der "normalen" Docker Befehle das Tool docker compose zu verwenden, da würdest du deine Einstellungen in einer Yaml Datein hinterlegen. Da habe ich aber auf QNAP Geräten noch keine Tests durchgeführt.

  • Alles klar, das werd ich mir mal ansehen. Danke schon mal ;)

  • Hallo,


    ich habe dieselbe Frage und verstehe nicht wie und was von dem Wust an Zeilen, die ich über den Befehl "docker history -H dd292455cea7 --no-trunc >> dockercommands.txt" erhalten habe nutzen kann um ein aktualisiertes image zu starten...


    Könnte jemand dies etwas konkreter beschreiben bitte? Bislang hatte ich alles über die Containerstation gemacht, aber das ist ja echt nervig.

  • Hi,


    ich habe den Befehl docker history noch nicht benutzt, kann daher nur vermuten, dass du damit alle docker Befehle, die die mal ausgeführt hast, in eine Datei mit dem Namen "dockercommands.txt" abspeicherst. Das abspeichern der Befehle ist deshalb nützlich, weil wie tuxflo schon geschrieben hast, die Historie bei einem Neustart des NAS gelöscht wird.

    Um es mal konkret zu machen: im Beispiel starten wir einen Node-Red Container mittels Konsolenbefehl: docker run -it -p 1880:1880 -v /share/CACHEDEV1/Container/nodered:/data --name node-red --restart unless-stopped nodered/node-red. Alle Container spezifischen Daten werden auf dem NAS im Ordner Container/nodered (aus Sicht der FileStation) abgespeichert.

    Um diesem Container nun ein Update zu verpassen führt man der Reihe nach folgende Befehle aus: docker stop node-red, docker rm node-red, docker pull nodered/node-red und zu guter letzt docker run -it -p 1880:1880 -v /share/CACHEDEV1/Container/nodered:/data --name node-red --restart unless-stopped nodered/node-red. Vll wird das mit dem Abspeichern der Befehle etwas klarer.

    Der andere Weg den tuxflo angesprochen hat, erfolgt mittels [docker-compose]. Das setzt aber voraus, dass der Run Befehl in eine yaml Datei umgesetzt wurde. Für das Beispiel oben sähe die yaml Datei wie folgt aus:


    Diese Datei speichert ihr jetzt ebenfalls im Ordner Container/nodered. In der Konsole wechselt ihr dann in diesen Ordner und führt den Befehl docker-compose up -d aus. Wollt ihr nun ein Update ausführen, reicht es den Befehl ein weiteres Mal auszuführen. Docker-compose überprüft dann ob ein neueres Image vorhanden ist und führt alle notwendigen Schritte zum updaten aus.

    Ich hoffe, dass das etwas Licht ins Dunkel bringt. Bei Fragen einfach wieder melden ;)

  • Oder man verwendet anstatt der Containerstation einfach ne alternative UI, wie zB.: den Portainer. Der kann das Updaten der images out of the box per Klick ->


    Get Started with Portainer
    Start your Portainer journey in the way that suits you! Whether via Open Source, 30 Day Free Trial, 3 Nodes Free Program, or buying Business Edition.
    www.portainer.io

  • Hallo Bad_Blade
    Mit Deiner Lösung bin ich sehr zufrieden. Danke!

    Ich habe kürzlich beschlossen, dass ich zwei gleiche Container haben möchte. Alles war in Ordnung bis ein Update aufgetaucht wurde.
    Beide Container waren latest Version, einen habe ich mit Deiner Lösung neu erstellt und den latest Image runtergeladen. Jetzt kann ich den anderen nicht mehr neu erstellen, die Einstellung ist ausgegraut. Hast Du dafür eine Lösung, wie ich den anderen auch auf latest aktualisieren kann?


    pasted-from-clipboard.png

  • Da schließe ich mich aus gegebenem Anlass doch mal an. Ich komme hier mit dem Ausdruck: "Versuchen Sie, das Image aus der Registrierung zu pullen ...." nicht so ganz klar.

    Ich habe einen speziellen TVHeadend-Container erstellt aus eine, Docker-Image, bei dem ich einiges anpassen musste. So musste ich im Container socat installieren. Probehalber habe ich jetzt erst mal ein Duplikat erstellt, um nicht gleich den funktionierenden Container zu zerschießen. Prompt sind dort diese Anpassungen aber nicht enthalten, obwohl ich den Haken weggelassen habe.


    Ist sowas, was ich will, überhaupt möglich?


  • Beide Container waren latest Version, einen habe ich mit Deiner Lösung neu erstellt und den latest Image runtergeladen. Jetzt kann ich den anderen nicht mehr neu erstellen, die Einstellung ist ausgegraut. Hast Du dafür eine Lösung, wie ich den anderen auch auf latest aktualisieren kann?

    Hi,

    ja, das Problem kenne ich leider auch. Das Problem ist, dass die neuste Version als "latest" gekennzeichnet wird und das alte Image bekommt in der Regel eine Versionsnummer. Je nach Container kann es aber vorkommen, dass dies nicht der Fall ist und das alte Image als Version "<none>" gekennzeichnet wird.
    pasted-from-clipboard.png


    In diesen Fall kann die Container Station dann kein direktes Update mehr durchführen, da die aktuelle Image Version unbekannt ist. Hier muss man dann leider wieder den umständlichen weg gehen.

    Warum das ganze passiert, kann ich nicht beantworten. Ich würde aber vermuten, es liegt daran, wie der Ersteller der Docker Images sein Tagging plaziert



    Da schließe ich mich aus gegebenem Anlass doch mal an. Ich komme hier mit dem Ausdruck: "Versuchen Sie, das Image aus der Registrierung zu pullen ...." nicht so ganz klar.

    Das ist einfach nur eine sehr schlechte Übersetzung. Die Option führt einfach nur ein "pull" der letzten Version aus, falls eine neuere Vorhanden ist. Hast du bereits die "latest" Version, wird auch nicht gepullt....

  • Wie kann man in diesem Fall mit dem genannten umständlichen Weg den NGINX Container updaten?
    Ich kenne mich mit CLI und SSH nicht so gut aus, deswegen die Frage.

  • Mod: Unnötiges Volltextzitat gekürzt! :handbuch::arrow: Forenregeln beachten und Die Zitat Funktion des Forums richtig nutzen

    Mit der Container Station 3 ist doch genau das einfach per GUI zu lösen.

    ..ist schon ein bisschen her aber trotzdem nochmal Danke an dieser Stelle. Ich hatte das dann irgendwann auch gefunden und das funktioniert wunderbar. Die Einstellungen werden zunächst übernommen aber man hat hier die Möglichkeit diese anzupassen - das hatte ich lange vermisst.

    Einmal editiert, zuletzt von obi ()

  • Wie kann man in diesem Fall mit dem genannten umständlichen Weg den NGINX Container updaten?

    Da gibt es mehrere Möglichkeiten:

    1. Screenshot deiner alten Einstellungen machen, Container löschen und einen neuen erstellen

    2. Portainer bereitstellen und darüber die Container updaten ( Weiß nicht warum, aber ich bin kein Fan von dem Tool, auch wenn viele andere dies Hauptsächlich für Docker nutzen )

    3. SSH


    Da ich generell SSH auf meinen QNAP deaktiviert habe und ich auch keine Lust habe das immer wieder zu aktivieren für 5 min etc. erstelle ich den Container einfach neu und lösche den alten.

    Ich habe dieses Problem so gut wie nie. Ich habe nur mehrere SteamCMD Container ( Steam Gameserver ) und da gab es noch kein Problem bezüglich der Updates und den Versions tagging. Und sofern man jeden Container nur einmal hat, sollte es auch keine Probleme geben.

  • Ich habe jetzt testweise mal Portainer installiert. Aber ich denke, ich werde es wieder runter schmeißen, da ich darin nichts finde, was mir gegenüber Container Station weiter hilft. So ist das nur eine zusätzliche Last.


    Hab doch gerade noch einen Schalter gefunden ....