Hilfreiche Scripts zu Docker/Podman

  • Ist immich nicht noch stark in Entwicklung oder läuft es bei euch allen auch nach Updates wieder bei allen rund?

    Schließt sich ja nicht aus. ;) Neue Funktionen kommen in kurzen Abständen, aber bislang ging bei mir alles gut. Ich schaue vor einem Update aber immer bei Github - Immich nach, was es so alles an Änderungen gab. Mache ich aber bei den meisten Docker-Anwendungen auch.

    Ist No 72 ein Skript, welches die alte Compose mit der neuen abgleicht und eine neue Compose Datei schneller realisieren kann?

    Richtig, es wird verglichen, aber nichts automatisch angepasst. Das mache ich dann doch lieber manuell. Aber ich muss dann nicht lange nach Veränderungen suchen. Alternativ könnte ich natürlich auch auf Gihub mir die Veränderungen anzeigen lassen, aber mit Script geht es schneller.

    Um zu sehen, für welche Anwendungen es Updates gibt, habe ich auch ein Script gebastelt. Auf den Server packen und laufen lassen. Ich starte es aber über SSH vom Desktop aus, spart mir die Anmeldung auf dem Server.

    Es müsste vorab das Tool "jq" installiert werden.

    Das Ergebnis sieht dann so aus.

  • Sojan Danke Dir. Du spielst das Docker Game hart. Ich schaue mir das mal an. Bei mir gehe ich hin und wieder über die Apps, schaue ins git und Portainer dann alles durch. Das Skript schaue ich mir mal an und melde mich, wenn ich da Hilfe brauche ;) Muss aber erst mal das Linux richtig ans rennen bringen.

    Linux Mint Anfänger und dankbar für Tipps und Ticks

  • Um zu sehen, für welche Anwendungen es Updates gibt, habe ich auch ein Script gebastelt. Auf den Server packen und laufen lassen. Ich starte es aber über SSH vom Desktop aus, spart mir die Anmeldung auf dem Server.

    Das Ergebnis sieht dann so aus.

    Ein schönes, einfaches und zugleich nützliches Skript! :thumbup:

    Ich hätte mir noch gewünscht, dass man auch die installierte und verfügbare Version der Images in eigenen Spalten sieht, ungefähr so:

    Zuerst dachte ich, das wäre eine einfache Erweiterung. Leider liefert die Ausgabe von "podman/docker manifest inspect" in der Regel keine Versionsnummer. Daher müsste man mit einem weiterem Tool, skopeo, die Meta-Daten eines Images von der Registry holen. Außerdem gibt es keinen Standard, wo die Versionsnummer, wenn überhaupt, hinterlegt ist. Da kann man nur verschiedene Möglichkeiten ausprobieren.

    Meine Erweiterung, die die obige Tabelle erzeugen kann, ist nicht so elegant und funktioniert vielleicht nur für Spezialfälle. Vielleicht interessiert es ja den ein oder anderen:

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 1.0
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 43 Workstation (GNOME)

    Edited 4 times, last by joka63: Korrektur: "docker buildx imagetools inspect" liest externe Metadaten von der Registry, nicht vom lokalen Image. (August 27, 2025 at 11:15 PM).

  • Zuerst dachte ich, das wäre eine einfache Erweiterung.

    Dachte ich auch und habe dann doch irgendwann aufgegeben. ;) Aber für die Aussage, Update ja/nein reicht es ja, mit Versionsnummer sieht es natürlich gleich viel schöner aus.

  • Eure Skripte gefallen mir. Bisher hab ich immer von Hand in den Repos nach Updates gesucht. Leider funktionieren bei mir beide nicht.

    Bei dem Skript von joka63 bekomme ich diesen Fehler:

    Bei dem Skript von Sojan siehts eigentlich ganz gut aus, aber es zeigt mir überall ein verfügbares Update (bei beiden Skripten) an, was aber nicht stimmt. Immich z. B. hab ich gerade erst aktualisiert.


    Moderators Wenn das schon zu Offtopic ist, bitte auslagern.

  • Wenn das schon zu Offtopic ist, bitte auslagern.

    Wäre ich auch dafür. So was in der Richtung "Hilfreiche Scripts zu Docker/Podman".

    Bei dem Skript von Sojan siehts eigentlich ganz gut aus, aber es zeigt mir überall ein verfügbares Update (bei beiden Skripten) an, was aber nicht stimmt. Immich z. B. hab ich gerade erst aktualisiert.

    Bitte die Ausgaben posten

    docker manifest inspect ghcr.io/immich-app/immich-server:release | jq -r '.manifests[] | select(.platform.architecture=="amd64") | .digest'

    und

    docker image inspect --format '{{.RepoDigests}}' ghcr.io/immich-app/immich-server:release

    Edited once, last by Sojan: Quatsch geschrieben, war noch vor dem zweiten Kaffee (August 26, 2025 at 10:36 AM).

  • Hier die Ausgaben:

    Code
    johannes@ubuntuserver:~$ docker manifest inspect ghcr.io/immich-app/immich-server:release | jq -r '.manifests[] | select(.platform.architecture=="amd64") | .digest'
    sha256:2d29dd7c3bdd3fb0cda55a186aa19d223c8ce9119221c51cb0bdedd0b0ff24e1
    johannes@ubuntuserver:~$ docker image inspect --format '{{.RepoDigests}}' ghcr.io/immich-app/immich-server:release
    
    [ghcr.io/immich-app/immich-server@sha256:c3c5eeafa5549e446b5fd71394399178d9c87da1dec5fd9e9a80a5a0f13e9fad]
  • johannes@ubuntuserver:~$ docker manifest inspect ghcr.io/immich-app/immich-server:release | jq -r '.manifests[] | select(.platform.architecture=="amd64") | .digest'

    sha256:2d29dd7c3bdd3fb0cda55a186aa19d223c8ce9119221c51cb0bdedd0b0ff24e1

    Diesen Wert habe ich auch.

    johannes@ubuntuserver:~$ docker image inspect --format '{{.RepoDigests}}' ghcr.io/immich-app/immich-server:release

    [ghcr.io/immich-app/immich-server@sha256:c3c5eeafa5549e446b5fd71394399178d9c87da1dec5fd9e9a80a5a0f13e9fad]

    Hier liegt das Problem. Bei mir sieht das so aus.

    Quote

    [ghcr.io/immich-app/immich-server@sha256:2d29dd7c3bdd3fb0cda55a186aa19d223c8ce9119221c51cb0bdedd0b0ff24e1 ghcr.io/immich-app/immich-server@sha256:c3c5eeafa5549e446b5fd71394399178d9c87da1dec5fd9e9a80a5a0f13e9fad]

    Würde das Image ghcr.io/immich-app/immich-server:release löschen und einen neuen Pull machen. Irgendwas stimmt da nicht mit dem lokalen Image.

  • Hab das Image heute erst frisch runtergeladen, weil ich ein Update gemacht hab. Außerdem sehen alle meine Images so aus:

    Code
    johannes@ubuntuserver:~$ docker image inspect --format '{{.RepoDigests}}' koenkk/zigbee2mqtt
    [koenkk/zigbee2mqtt@sha256:472f4f5ed5d4258056093ea5745bc0ada37628b667d7db4fb12c2ffea74b2703]
    johannes@ubuntuserver:~$ docker image inspect --format '{{.RepoDigests}}' ghcr.io/home-assistant/home-assistant:stable
    [ghcr.io/home-assistant/home-assistant@sha256:cd742b4b3311c7e84a978448860088e734221e9314b73e3931d148d1b081a263]

    Welche Docker Version hast du?

    Code
    johannes@ubuntuserver:~$ docker --version
    Docker version 28.3.3, build 980b856

    Warum hast du zwei verschiedene Hashes? Ist das einmal die installierte und einmal die aktuelle Version?


    Edit: Das sagt Gemini dazu:

    Der Unterschied in der Ausgabe des docker image inspect-Befehls liegt daran, dass auf dem einen Server das Docker-Image nur einen einzigen Digest hat, während auf dem anderen Server mehrere Digests vorliegen.


    Ursachen für den Unterschied


    Der RepoDigest ist die eindeutige Hash-Signatur eines Docker-Images, die an den Namen des Repositories gebunden ist. Ein einzelnes Image kann mehrere RepoDigests haben, wenn es unter verschiedenen Namen oder Tags ins Repository gepusht wurde, aber denselben Inhalt hat.

    Der wahrscheinlichste Grund für den Unterschied in deiner Ausgabe ist, dass das Docker-Image auf dem zweiten Server unter zwei verschiedenen Tags (z. B. release und v1.104.1) existiert, die auf denselben Image-Inhalt verweisen. Wenn du das Image mit einem der Tags auf den Server ziehst, kann Docker beide Digests speichern, da sie beide auf dasselbe Image-ID verweisen.

    Im Gegensatz dazu wurde auf dem ersten Server das Image vermutlich nur unter einem einzigen Tag (in diesem Fall release) heruntergeladen und es ist nur ein Digest bekannt.

    Zusammenfassend:

    • Erster Server: Das Image wurde nur unter einem Tag (release) gepullt.
      • Ausgabe: [ghcr.io/immich-app/immich-server@sha256:c3c5eeafa5549e446b5fd71394399178d9c87da1dec5fd9e9a80a5a0f13e9fad]
    • Zweiter Server: Das Image existiert lokal unter mehreren Tags, die auf denselben Inhalt verweisen.
      • Ausgabe: [ghcr.io/immich-app/immich-server@sha256:2d29dd7c3bdd3fb0cda55a186aa19d223c8ce9119221c51cb0bdedd0b0ff24e1 ghcr.io/immich-app/immich-server@sha256:c3c5eeafa5549e446b5fd71394399178d9c87da1dec5fd9e9a80a5a0f13e9fad]

    Der zweite Server hat also zusätzliche Informationen über das Image, die auf die Existenz eines weiteren Tags hindeuten. Dies ist ein normales Verhalten von Docker und beeinträchtigt in der Regel nicht die Funktionalität des Images.

  • Welche Docker Version hast du?

    Nutze Podman.

    Warum hast du zwei verschiedene Hashes? Ist das einmal die installierte und einmal die aktuelle Version?

    Weiß nicht, auf jeden Fall ist der Hash vom Repo enthalten.

    Code
    "RepoDigests": [
       "ghcr.io/immich-app/immich-server@sha256:2d29dd7c3bdd3fb0cda55a186aa19d223c8ce9119221c51cb0bdedd0b0ff24e1",
       "ghcr.io/immich-app/immich-server@sha256:c3c5eeafa5549e446b5fd71394399178d9c87da1dec5fd9e9a80a5a0f13e9fad"
              ],

    Nach meinem Verständnis muss doch der Hash vom lokalen Image mit dem des Repos übereinstimmen. :/

    Ich denke, wir sollten uns dein Image näher anschauen. Kannst du docker image inspect ghcr.io/immich-app/immich-server:release posten.

  • Ich habe keine Ahnung, warum die Digest voneinander abweichen. Aber auf diesem Vergleich beruht das Script. Gerade keine Idee mehr.

    Aber ich denke noch mal drüber nach, vielleicht fällt mir noch was ein.

  • Bei dem Skript von joka63 bekomme ich diesen Fehler:

    Code
    johannes@ubuntuserver:~$ ./docker-update-check.sh 
    waitdocker: invalid reference format

    Ich hatte das Skript nur mit podman getestet und da ist so ein blöder Fehler hereingerutscht, weswegen alle skopeo-Aufrufe mit dieser Fehlermeldung fehlschlugen, falls man das Skript mit docker startet.

    Ich habe das Skript direkt in meinem Beitrag #4 korrigiert, da das Forum eine Versionierung von Beiträgen hat. So kann jeder sehen, was genau ich im Skript korrigiert habe.

    Leider gibt es mit Docker wohl einige wahrscheinlich unlösbare Probleme: nach kurzer Zeit bekommt man "You have reached your unauthorized pull limit" Fehler, die ich in der podman-Version nicht gesehen habe. Außerdem liefern die "docker image/manifest inspect" Aufrufe weniger Daten als die entsprechenden podman-Aufrufe, weshalb die Abfrage von Versionsinfos in der Regel scheitern wird.

    Und für das Digest-Mismatch-Problem habe ich auch keine Lösung gefunden.

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 1.0
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 43 Workstation (GNOME)

  • jjk1

    Probiere mal diese neue Version.

  • Probiere mal diese neue Version.

    Jetzt zeigt er mir überall KEIN Update an, obwohl definitiv bei manchen Containern Updates verfügbar sind...

    Ich habe das Skript direkt in meinem Beitrag #4 korrigiert, da das Forum eine Versionierung von Beiträgen hat. So kann jeder sehen, was genau ich im Skript korrigiert habe.

    Der Fehler ist weg. Ich bekomme aber weiterhin bei jedem Container ein verfügbares Update angezeigt.

    nach kurzer Zeit bekommt man "You have reached your unauthorized pull limit" Fehler, die ich in der podman-Version nicht gesehen habe.

    Ja, man hat glaub nur 100 Aufrufe pro 6 Stunden frei. Das sollte bei nicht allzu großen Installationen aber reichen, um einmal das Skript auszuführen. Ist aber natürlich nervig zum Debuggen. Man kann aber einen Account erstellen, dann hat man mehr (oder sogar unbegrenzt?). Aber auch das müsste man erstmal in das Skript integrieren.

  • Jetzt zeigt er mir überall KEIN Update an, obwohl definitiv bei manchen Containern Updates verfügbar sind...

    Ok, kann ich aber erst testen, wenn es wieder ein Update zu Immich gibt. Sollte ja nicht so lange dauern...

  • Teste das Script mit Docker in einer VM mit Debian als OS.

    Habe jetzt noch zwei weitere Container aufgenommen, um die Sache etwas zu beschleunigen. ;)

  • Ja, man hat glaub nur 100 Aufrufe pro 6 Stunden frei. Das sollte bei nicht allzu großen Installationen aber reichen, um einmal das Skript auszuführen. Ist aber natürlich nervig zum Debuggen. Man kann aber einen Account erstellen, dann hat man mehr (oder sogar unbegrenzt?). Aber auch das müsste man erstmal in das Skript integrieren.

    Für mich noch ein Grund mehr, Docker nicht zu benutzen.

    Zotac ZBox ID91: Zorin OS 18 (GNOME) und GuideOS 1.0
    Geekom Mini IT11: Fedora 43 Silverblue (GNOME)
    Macbook Pro 2015: Fedora 43 Workstation (GNOME)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!