Docker Update und Start

Ben2013

Benutzer
Mitglied seit
01. Nov 2021
Beiträge
114
Punkte für Reaktionen
11
Punkte
18
Hallo,

Docker ist an sich eine feine Sache. Man bekommt ein fertiges Image von einem System-Bestandteil und kan es mit Parametern an seine Bedürnisse anpassen.

Es hat in meinen Augen einen Fehler im Konzept:

Wenn ein Image aktualisiert werden muss, dann muss ein bestehender Container gestoppt und entfernt werden. Mit dem Entfernen gehen alle Einstellungen mit flöten. Man muss diese Einstellungen, wie z.B. Pfadzugehörigkeiten, IP-Adresse, u.s.w., alles beim neuen Starten neu einstellen. Wenn man sich diese Einstelulngen nicht in eine separaten Dokumentation aufgeschrieben hat, hat man schlechte Aussichten, dass man die zuvor aktuellen Einstellungen wieder zusammen tragen kann.

Um diese Einstellungen ein für alle Mal sicher immer beim Erstellen eines Containers parat zu haben, wurde eine Bash-DAtei erstellt:

Bash:
#!/bin/bash

name=nextcloud
image=nextcloud:latest

ls=$(docker container ls -f NAME=$name)
if [ ! -z "$ls" ]; then
    docker stop $name
    docker rm $name
    docker pull $image
fi

docker run -d \
    --restart=always \
        -v /var/run/docker.sock:/var/run/docker.sock \
            -v nextcloud_data:/data \
            --name "$name" \
            --network "net" \
            --ip "192.168.188.25" \
            --hostname "cloud" \
            $image

docker start $name

Das ist eine Bash-Datei zum Updaten und Starten von nextcloud-Containers.

Das Script funktioniert so weit ganz gut.

Am Ende wird dennoch immer noch ein Volume erstellt mit einem kryptischen Namen. Das besondere daran ist, dass bei jedem Aufruf ein neuer Container mit einem kryptischen Namen erstellt und dem Container zugeteilt wird.

Eigentlich sollte nur ein Volume mit dem Namen "nextcloud_data" erstellt werden.
Hintergrund ist der, dass die Daten nach einem Update weiterhin verfügbar sein werden.

Da aktuell bei jedem Durchlauf zusätzlich ein weiteres Volume mit einem kriptischen Namen erstellt wird, hat man schließlich mehr oder weniger viele Volumes, die nicht zugewiesen werden können.

Weiß jemand, welcher Parameter beim Docker übergeben werden muss, damit diese neben dem eigentlichen Volume "nextcloud_data" kein weiteres Volume anlegt?

---

Mit einem Portainer.io werden die Container verwaltet. Es hat ein gute GUI. Genial wäre es, wenn im GUI auch der Docker-Befehl mit allen Parametern angezeigt werden könnte, die beim Erstellen verwendet worden sind.
 
Zuletzt bearbeitet:

Mahoessen

Benutzer
Mitglied seit
20. Jul 2016
Beiträge
1.069
Punkte für Reaktionen
216
Punkte
83
Wenn ein Image aktualisiert werden muss, dann muss ein bestehender Container gestoppt und entfernt werden. Mit dem Entfernen gehen alle Einstellungen mit flöten. Man muss diese Einstellungen, wie z.B. Pfadzugehörigkeiten, IP-Adresse, u.s.w., alles beim neuen Starten neu einstellen.
öhm… nein, da musst du nur den Container aktualisieren, deine Einstellungen in den gemappten Verzeichnissen bleiben bestehen. Einfach nochmal nachlesen…
ich aktualisiere regelmäßig mehrere Container und konfiguriere Nichts neu.
 

Ben2013

Benutzer
Mitglied seit
01. Nov 2021
Beiträge
114
Punkte für Reaktionen
11
Punkte
18
da musst du nur den Container aktualisieren
Am Beispiel des Portainer-Containers bin ich darauf gekommen:
Quelle: https://docs.portainer.io/v/ce-2.9/...tion-1-upgrading-from-version-2.0.0-and-later
Unter "Option 1" wird genau aufgelistet, was zu tun ist, um einen Container zu aktualisieren:

1. docker stop portainer
2. docker rm portainer
3. docker pull ...
4. docker run ...

Wie man anhand dieses Beispiels sehen kann, muss erst der Container komplett entfernt, aktualisiert und anschließend neu komplett erstellt werden.

ich aktualisiere regelmäßig mehrere Container und konfiguriere Nichts neu.
Wie machst Du denn das?
 

Adama

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
05. Mrz 2013
Beiträge
2.149
Punkte für Reaktionen
737
Punkte
154

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Ansonsten erspart einem docker-compose die Arbeit dafür auch... Neus Image draussen? Einfach das Tag im jeweiligen Service im "compose file" anpassen und mit docker-compose up -d neu deployen... oder über Portainer?

Wenn schon faul, dann richtig ^^
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Weiß jemand, welcher Parameter beim Docker übergeben werden muss, damit diese neben dem eigentlichen Volume "nextcloud_data" kein weiteres Volume anlegt?
Das passiert immer dann, wenn der Image-Erzeuger so kluk (Dank an Home Simpson für diese Schreibweise) war, auch optionale Volumes mit einer VOLUME Deklaration im Dockerfile zu versehen und der Container-Erzeuger so kluk war kein Volume dagegen zu mappen.

Man kann sich die für ein Image "vorgesehenen" Volumes anzeigen lassen:
Code:
docker image inspect ${imageid oder repo:tag} --format '{{.Config.Volumes}}'
Gegen JEDEN Eintrag, der dort auftaucht wird ein Volume gebunden. Entweder explizit als Bindmount von Dir über die UI, oder implizit von Docker als Anoynmous Volume (Zufälliger Name aus alphanumerischen Zeichen)

Da hilft nur: keinen Volume Mount ungenutzt lassen ODER sich nach einem Image umschauen, dass sparsammer mit den VOLUME deklaration umgeht.
Mitlerweile ist best practive VOLUME maximal für "zwangs volumes" zu verwenden und optionale gar nicht zu deklarieren... oder gleich gar keine Im Dockerfile deklarieren.

Docker ist es egal, ob ein Container-Verzeichnis als VOLUME deklariert wurde oder nicht - man kann trotzdem ein Bindmount bzw. Volume in ein beliebiges Container-Verzeichnis mappen.
 

Mahoessen

Benutzer
Mitglied seit
20. Jul 2016
Beiträge
1.069
Punkte für Reaktionen
216
Punkte
83

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.475
Punkte für Reaktionen
1.087
Punkte
194
Das Update läuft mit Portainer mit drei Klicks.
CE4L3s9.png
 
  • Like
Reaktionen: Ben2013


 

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