Docker Image/Container aktualisieren?

Dexter84

Benutzer
Mitglied seit
20. Aug 2016
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich habe mal angefangen mich mit Docker näher zu befassen und mir ist gleich eine etwas grundlegende Frage gekommen. Sobald ich ein Docker Image und Container lade bzw. starte habe ich diesen auf dem neusten Stand. Wie bekomme ich diesen ohne wieder alles löschen zu müssen auf den aktuellen Stand?
Ich hatte bisher keine Update Funktion gefunden.
Besten Dank schonmal
 
Zuletzt bearbeitet:

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.188
Punkte für Reaktionen
71
Punkte
68
In der Gui ist das nicht vorgesehen. Auf der Kommandozeile kann man aber mit "docker pull <image>" eine neue Version ziehen. Vorher natürlich den Container stoppen und am besten den alten Container auch löschen. Dazu kann man vorher die Einstellungen exportieren und hinterher wieder importieren. Vorausgesetzt die Parameter ändern sich nicht.
 

Dexter84

Benutzer
Mitglied seit
20. Aug 2016
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Vielen Dank für deine Antwort.
Das käme dann aber einem löschen und neu anlagen quasi gleich. Ich nutze z.B. Tvheadend oder Sabnzbd über Docker und müsste danach alle Einstellungen wieder neu machen, Senderlisten sichern etc. Alle Settings exportieren wird schwierig sein. Selbst wenn ich alle Konfigurationsdateien sichere muss ich diese zumindest wieder manuell einspielen.
Also ein "normales" Update wie bei den normalen Synology oder Debian Paketen funktioniert damit nicht....?
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.188
Punkte für Reaktionen
71
Punkte
68
Nein, das gibt bei Docker nicht. Da wird das Image ausgetauscht.

Das Dockerimage ist eigentlich unveränderlich. Man legt Einstellungen, Daten usw. in lokal auf der DS gemountete Verzeichnisse (Volumes in der Docker Gui) ab. Deshalb kann man das Image wegwerfen und durch ein neues ersetzen. Wenn man den die Mounts wieder genauso macht wie vorher, wird die Konfiguration wieder geladen und alles ist gut. Wenn Du keine Mounts für die Konfigurationsverzeichne hast und auch kein (ohnehin nicht empfohlenen) Commit gemacht hast, wirst Du spätestens nach einem DS Neustart feststellen, das alles wieder jungfräulich ist.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Yep Tomm2day hat es auf den Punkt gebracht: es ist nicht vorgesehen dauerhaft zu speichernde Daten im Container abzulegen. Dafür mappend man Volumes (lokalen Syno-Pfad oder einen Daten-Container) gegen Pfade des Containers...

Für sabnbd kannst Du das folgend korrigieren:
1. Im alten Container folgendes mapping verwenden (muss vorher heruntergefahren sein)
- lokal: /docker/sabnzbd/config
- container: /config2

2. Container starten
3. In der Docker UI unter "Details" -> "Terminal" den Befehl "/bin/bash" starten.
4. im Terminal folgendes eingeben: cp -r /config/* /config2/
5. Container herunterfahren
6. Prüfen ob Konfiguration unter /docker/sabnzbd/config wiederzufinden ist
7. Container Einstellungen exportieren
8. Container löschen
9. Auf der Shell docker pull {imagename} machen
10. Container Einstellungen importieren (klappt nur wenn vorher das latest Tag verwendet wurde, sonst muss es angepasst werden) - NICHT STARTEN!
11. Vor dem Start neuen Containers das Volume Mapping folgend anpassen:
- lokal: /docker/sabnzbd/config
- container: /config
12. Container starten
13. freuen das die Konfiguration noch da ist.

Bei Vorgehen klappt natürlich auch mit anderen Containern, hier müssen nur die Pfade entsprechend angepasst werden.

Kleiner Tipp: ich kann Dir hier linuxserver/sabnzbd besonders empfehlen (wobei ich selber mitlerweile nzbget verwende, da es ressourcenfreundlicher für ein NAS ist), da hier zum Einen sowohl Berechtigungen gesetzt werden können, als auch ein Autoupdate (=bei Container-Neustart) auf sabnzbd vorhanden ist
 

Dexter84

Benutzer
Mitglied seit
20. Aug 2016
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Vielen dank für die tolle Anleitung!!!!!
Das heisst somit jeder Container hat quasi sein festgelegtes config dir welches nur gemappt werden muss.
Ich benutze den lokalen "docker" Ordner um dort meine configs anzulegen. (z.B. /docker/dockerpogramm/config)
Durch das mapping auf diesen Ordner habe ich bei der Image Aktualisierung automatisch immer meine Konfiguration geladen.
Ich könnte den Container komplett löschen und neu anlegen und alles wäre quasi wie vorher.
Das teste ich jetzt mal. Vielen lieben dank nochmal.
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.188
Punkte für Reaktionen
71
Punkte
68
Fast richtig. Jede Anwendung hat seine Konfiguration im Betriebssystem. Gewöhnlich ist das ein Verzeichnis unter /etc. Die Stellen unterscheiden sich aber von Anwendung zu Anwendung. Man muss nun mit dem Mapping dieses oder auch mehrere Verzeichnis im Container auf ein beschreibbares Verzeichnis auf der Syno umleiten. Das gleiche gilt auch für andere Verzeichnisse wo Daten gehalten werden z.B. von einer Datenbank. Damit die Daten nicht nach dem Container-Neustart weg sind, macht man ein Mapping z.B. von /var/lib/mysql im Container zu /docker/mysql (oder wo immer man will) auf der Syno.
Normalerweise beschreibt der Anbieter des Images auf hub.docker.com, für welche Verzeichnisse er Mappings vorgesehen hat oder man schaut gleich ins Dockerfile nach der VOLUME Anweisung.
 

Dexter84

Benutzer
Mitglied seit
20. Aug 2016
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Wenn ich die Config Pfade direkt sehen könnte wäre das super, dann kann ich hierzu gleich lokale Pfade und das Mapping bereitstellen. Ich habe schon Beschreibungen gefunden, aber nicht jeder beschreibt es exakt in seiner Doku.
Edit: hab das Dockerfile gefunden. Leider stellt es linuxserver.io nicht auf der Docker Website zur Verfügung
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Von Dockerhub aus solltest Du einen Link auf github bekommen.

Ansonsten kannst Du das auch docker inpect herausbekommen:
Code:
docker inspect -f "{{.Config.Volumes }}"  {container-id}

Da jede Anwendung und jeder Docker-Image Maintainer andere Vorlieben/Vorstellungen davon hat wo die Konfigurationen liegen sollen, kommt man nicht drum herum jedes mal auf's neue herauszufinden wie es den benötigt wird...In der Regel langt aber die Beschreibung auf Dockerhub bzw. ein Blick auf das entsprechende Github-Repo...

Achja und nicht immer sind alle Verzeichnisse die man gerne mappen würde auch als Volume im Dockerfile ausgewiesen und manche Image maintainer sparen sich das auch einfach mal...
 

Martinus1977

Benutzer
Mitglied seit
10. Mai 2011
Beiträge
134
Punkte für Reaktionen
0
Punkte
0
Moin zusammen,

auch ich versuche irgendwie in Docker ein wenig weiterzukommen, aber irgendwie scheitere ich auch am Mapping. Ich würde zum Beispiel gerne Collabora in NextCloud einbinden, aber egal was ich bisher versucht habe - ich bin gnadenlos gescheitert. Hat hier jemand eine Anleitung? Ich finde zwar in der Doku noch den passenden Port, aber beim versuch, über SynoIP:9980/loleaflet/dist/admin/admin.html das ganze erstmal zu verwalten, falle ich auf die Nase (404) - über einen anderen link (hab ich leider vergessen) sehe ich, dass irgendwas an office geladen wird, aber lande letztlich auch auf einer nicht nutzbaren Seite.
Ich vermute, dass ich hier mit dem Mapping etwas weiter käme, aber wenn jemand eine komplette Anleitung hätte, wäre mir sehr geholfen!

(Bin kein Freund von ewig neuen Threads, deshalb hänge ich mich hier mal ran - wenn ein neuer Thread gewünscht ist, kann ich mich da gerne ändern)
 

Uhlhorn

Benutzer
Mitglied seit
11. Nov 2019
Beiträge
114
Punkte für Reaktionen
12
Punkte
24
In der Gui ist das nicht vorgesehen.
Also jetzt geht es. Ich trage das nach, weil vielleicht jemand danach sucht und diese Diskussion hier findet (ich zum Beispiel).

Vielleicht ging es ja damals genau so wie heute, denn die Updatefunktion ist nicht offensichtlich:
Ich habe hier Uptime-Kuma auf 2 Synology an 2 Standorten laufen. Mein Container habe ich gelöscht und neu installiert, so wie Du es beschrieben hast. Das funktioniert, ist aber nicht schön.

Auf der entfernten Synology habe ich es versehentlich anders aktualisiert: Ich habe den Container einmal gestoppt und dann neu gestartet. Schon war es aktualisiert. Möglicherweise werden die Image-Dateien von Synology Docker automatisch aktualisiert, solange man „latest“ verwendet.

Leider kann ich das nicht überprüfen, weil ich es nicht wiederholen kann. Jedenfalls war es plötzlich ohne weitere Eingriffe – vom Stoppen und Starten des Containers abgesehen – aktuell.
 

Penthys

Benutzer
Mitglied seit
04. Jun 2020
Beiträge
250
Punkte für Reaktionen
53
Punkte
34
Normalerweise lädt man das aktuelle Image, stoppt den Container, wählt Aktion->Zurücksetzen und starten ihn wieder. So wird der Container mit dem zuletzt geladenen Image und der zuletzt verwendeten Konfiguration neu aufgebaut. Schneller geht es sicher nicht.
 

Uhlhorn

Benutzer
Mitglied seit
11. Nov 2019
Beiträge
114
Punkte für Reaktionen
12
Punkte
24
Ich habe aber weder das aktuelle Image geladen noch irgend etwas zurückgesetzt. Ich hatte den Container nur gestoppt, um in die Einstellungen schauen zu können. Ich wollte die Volume-Einstellungen auch auf der anderen Synology haben (ich hatte dort damals kein Volume angelegt). Updaten wollte ich ihn eigentlich erst später.

Schritte:
  1. Container gestoppt
  2. Einstellungen dupliziert
  3. Duplizierte Einstellungen wieder gelöscht
  4. Container wieder gestartet.
Das Einzige, was wirksam gewesen sein kann ist das Stoppen und Starten des Containers.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat