{"id":3618,"date":"2023-08-28T07:00:00","date_gmt":"2023-08-28T05:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3618"},"modified":"2024-12-19T20:52:05","modified_gmt":"2024-12-19T19:52:05","slug":"container-mit-podman-auto-update-automatisch-aktualisieren","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/container-mit-podman-auto-update-automatisch-aktualisieren\/","title":{"rendered":"Container mit podman-auto-update automatisch aktualisieren"},"content":{"rendered":"\n<p>In diesem Tutorial zeige ich euch, wie ihr eine automatische Aktualisierung f\u00fcr Container in rootless-Podman-Umgebungen konfigurieren und diese Container als <code>systemd<\/code>-Services verwalten k\u00f6nnt.<\/p>\n\n\n\n<p>Das Tutorial gliedert sich in folgende Abschnitte:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"#anwendungsfaelle\" data-type=\"internal\" data-id=\"#anwendungsfaelle\">Anwendungsf\u00e4lle<\/a><\/li>\n\n\n\n<li><a href=\"#voraussetzungen\" data-type=\"internal\" data-id=\"#voraussetzungen\">Voraussetzungen<\/a><\/li>\n\n\n\n<li><a href=\"#umgebung\" data-type=\"internal\" data-id=\"#umgebung\">Umgebung und verwendetes Container-Image<\/a><\/li>\n\n\n\n<li><a href=\"#konfiguration\" data-type=\"internal\" data-id=\"#konfiguration\">Konfiguration des <code>systemd<\/code>-Service mit Auto-Update-Funktion<\/a><\/li>\n\n\n\n<li><a href=\"#container-update\" data-type=\"internal\" data-id=\"#container-update\">Container (automatisch) aktualisieren<\/a><\/li>\n<\/ol>\n\n\n\n<p>Wer sich nicht f\u00fcr die m\u00f6glichen Anwendungsf\u00e4lle interessiert und lieber gleich starten m\u00f6chte, kann den ersten Abschnitt \u00fcberspringen. Die \u00fcbrigen Abschnitte sollten in der angegebenen Reihenfolge gelesen werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"anwendungsfaelle\">Anwendungsf\u00e4lle<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Container werden auf einem Single-Container-Host ausgef\u00fchrt und nicht in K8s-Umgebungen<\/li>\n\n\n\n<li>Man vertraut dem Anbieter, dass dieser stabile und nutzbare Container-Images bereitstellt<\/li>\n\n\n\n<li>Es soll regelm\u00e4\u00dfig gepr\u00fcft werden, ob aktualisierte Container-Images vorhanden sind<\/li>\n\n\n\n<li>Sind aktuellere Images vorhanden, sollen laufende Container entfernt und unter Verwendung der aktuellen Images neu erstellt werden<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"voraussetzungen\">Voraussetzungen<\/h2>\n\n\n\n<p>Um diesem Tutorial folgen zu k\u00f6nnen, ben\u00f6tigt ihr einen Host mit einer rootless-Podman-Umgebung. Podman muss dabei in der Version &gt;= 3.3 verf\u00fcgbar sein. In der folgenden Liste findet ihr einige Links, die euch helfen, eine solche Umgebung aufzusetzen.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/podman.io\/docs\/installation\" data-type=\"link\" data-id=\"https:\/\/podman.io\/docs\/installation\">Podman Installation Instructions<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/containers\/podman\/blob\/main\/docs\/tutorials\/rootless_tutorial.md\" data-type=\"link\" data-id=\"https:\/\/github.com\/containers\/podman\/blob\/main\/docs\/tutorials\/rootless_tutorial.md\">Basic Setup and Use of Podman in a Rootless environment<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rootless-podman-mit-debian-bullseye\/\" data-type=\"post\" data-id=\"3001\">Rootless-Podman mit Debian Bullseye<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/cstan.io\/post\/2022\/09\/kurztipp-rootless-podman-docker-compose-unter-fedora\/\" data-type=\"link\" data-id=\"https:\/\/cstan.io\/post\/2022\/09\/kurztipp-rootless-podman-docker-compose-unter-fedora\/\">Kurztipp: Rootless Podman + docker-compose unter Fedora<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/9\/html\/building_running_and_managing_containers\/assembly_starting-with-containers_building-running-and-managing-containers#proc_setting-up-rootless-containers_assembly_starting-with-containers\" data-type=\"link\" data-id=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/9\/html\/building_running_and_managing_containers\/assembly_starting-with-containers_building-running-and-managing-containers#proc_setting-up-rootless-containers_assembly_starting-with-containers\">RHEL 9: Setting up rootless containers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/8\/html\/building_running_and_managing_containers\/assembly_starting-with-containers_building-running-and-managing-containers#proc_setting-up-rootless-containers_assembly_starting-with-containers\" data-type=\"link\" data-id=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/8\/html\/building_running_and_managing_containers\/assembly_starting-with-containers_building-running-and-managing-containers#proc_setting-up-rootless-containers_assembly_starting-with-containers\">RHEL 8: Setting up rootless containers<\/a><\/li>\n<\/ul>\n\n\n\n<p>Dar\u00fcber hinaus solltet ihr <a href=\"https:\/\/de.wikipedia.org\/wiki\/Manpage\" data-type=\"link\" data-id=\"https:\/\/de.wikipedia.org\/wiki\/Manpage\">Manpages<\/a> lesen k\u00f6nnen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"umgebung\">Umgebung und verwendetes Container-Image<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RHEL 9 mit Podman 4.4.1<\/li>\n\n\n\n<li>Debian 12 mit Podman 4.3.1 (Bitte <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/container-mit-podman-auto-update-automatisch-aktualisieren\/#comment-59634\">Kommentar<\/a> beachten)<\/li>\n\n\n\n<li>Container-Image von <a href=\"https:\/\/github.com\/louislam\">louislam<\/a>\/<a href=\"https:\/\/github.com\/louislam\/uptime-kuma\">uptime-kuma<\/a><\/li>\n<\/ul>\n\n\n\n<p>Das Betriebssystem spielt eine untergeordnete Rolle, da wir durch die Verwendung von Containern die Anwendung vom Betriebssystem entkoppeln. Alle zur Ausf\u00fchrung der Anwendung notwendigen Abh\u00e4ngigkeiten sind im Container-Image enthalten.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/louislam\/uptime-kuma\" data-type=\"link\" data-id=\"https:\/\/github.com\/louislam\/uptime-kuma\">Uptime Kuma<\/a> ist eine schlanke und schnelle Monitoring-Anwendung, welche unter anderem als Container-Image bereitgestellt wird. Ich habe die Anwendung als Beispiel f\u00fcr dieses Tutorial ausgew\u00e4hlt, da ich die Anwendung selbst nutzen m\u00f6chte und so Synergieeffekte nutzen kann.<\/p>\n\n\n\n<p>Wer ein anderes Container-Image nutzen m\u00f6chte, muss in den folgenden Beispielen <code>louislam\/uptime-kuma:latest<\/code> durch den <em>fully qualified container name<\/em> des zu nutzenden Images ersetzen.<\/p>\n\n\n\n<p>F\u00fcr die Konfiguration werden die auf dem System verf\u00fcgbaren Podman-Manpages benutzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"konfiguration\">Konfiguration des Systemd-Service mit Auto-Update-Funktion<\/h2>\n\n\n\n<p>Bei den folgenden Schritten habe ich mich am Beispiel aus podman-auto-update(1) orientiert.  Ich zeige zuerst den jeweils auszuf\u00fchrenden Befehl in einem Code-Block, gefolgt von einer Erl\u00e4uterung der genutzten Optionen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Podman-Volume erzeugen<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman volume create uptime-kuma\nuptime-kuma<\/code><\/pre>\n\n\n\n<p>Um Daten persistent speichern zu k\u00f6nnen, m\u00fcssen diese au\u00dferhalb des Containers abgelegt werden. Der dargestellte Befehl erzeugt ein Podman-Volume mit dem Namen \u201euptime-kuma\u201c.<\/p>\n\n\n\n<p>Mit dem folgenden Befehl lassen sich detaillierte Informationen zum gerade erstellten Volume anzeigen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman volume inspect uptime-kuma\n&#91;\n     {\n          \"Name\": \"uptime-kuma\",\n          \"Driver\": \"local\",\n          \"Mountpoint\": \"\/home\/tronde\/.local\/share\/containers\/storage\/volumes\/uptime-kuma\/_data\",\n          \"CreatedAt\": \"2023-08-22T20:52:06.477341481+02:00\",\n          \"Labels\": {},\n          \"Scope\": \"local\",\n          \"Options\": {},\n          \"MountCount\": 0,\n          \"NeedsCopyUp\": true,\n          \"NeedsChown\": true\n     }\n]<\/code><\/pre>\n\n\n\n<p>Der Schl\u00fcssel <code>Mountpoint<\/code> enth\u00e4lt den Pfad im lokalen Dateisystem, in dem das Volume erstellt wurde.<\/p>\n\n\n\n<p>Manpages zum Nachschlagen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>podman-volume(1)<\/li>\n\n\n\n<li>podman-volume-create(1)<\/li>\n\n\n\n<li>podman-volume-inspect(1)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"container-starten\">Container starten<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman run --label \"io.containers.autoupdate=registry\" -d -p 3001:3001 -v uptime-kuma:\/app\/data:Z --name=uptime-kuma docker.io\/louislam\/uptime-kuma:latest\nTrying to pull docker.io\/louislam\/uptime-kuma:latest...\nGetting image source signatures\nCopying blob d7ca72974892 done  \nCopying blob 475646a04a73 done  \nCopying blob 1d496c24aec8 done  \nCopying blob 6a3727d8681d done  \nCopying blob b00c91ba9805 done  \nCopying blob ddade83992f9 done  \nCopying blob b8454ed537a7 done  \nCopying blob 849e609eff67 done  \nCopying blob f861188db6a1 done  \nCopying blob 5f3c3e6d7f1c done  \nCopying blob 4f4fb700ef54 skipped: already exists  \nCopying blob 68b7bcf7c878 done  \nCopying config fb3a3565b2 done  \nWriting manifest to image destination\nStoring signatures\nad7b049d9b84962311f5bafb5329f59961d8a031e54a571f079b8243ea8059ee<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>podman run<\/code> ist das Kommando, mit dem ein neuer Container gestartet wird<\/li>\n\n\n\n<li>Die Option <code>--label \"io.containers.autoupdate=registry\"<\/code> gibt an, dass Podman die Remote-Registry pr\u00fcft, ob dort ein aktualisiertes Image vorhanden ist; dieses Label ist Voraussetzung, um die Auto-Update-Funktion nutzen zu k\u00f6nnen<\/li>\n\n\n\n<li>Mit der Option <code>-d<\/code> wird der Container im Hintergrund gestartet und die Container-ID auf STDOUT ausgegeben<\/li>\n\n\n\n<li>Durch <code>-p 3001:3001<\/code> wird der Host-Port 3001 mit dem Port der Anwendung (ebenfalls 3001) im Container verbunden<\/li>\n\n\n\n<li>Die Option <code>-v uptime-kuma:\/app\/data:Z<\/code> h\u00e4ngt das im vorhergehenden Schritt erstellte Podman-Volume in das Verzeichnis <code>\/app\/data<\/code> innerhalb des Containers ein; <code>:Z<\/code> sorgt daf\u00fcr, dass der SELinux-Kontext korrekt gesetzt wird<\/li>\n\n\n\n<li><code>--name=uptime-kuma<\/code> spezifiziert den Namen des Containers; dieser ist etwas leichter zu merken als die Container-ID<\/li>\n\n\n\n<li>Der Befehl endet mit dem <em>fully qualified container name<\/em> <code>docker.io\/louslam\/uptime-kuma:latest<\/code><\/li>\n\n\n\n<li>Die letzte Zeile des Code-Blocks enth\u00e4lt die Container-ID<\/li>\n<\/ul>\n\n\n\n<p>Manpages zum Nachschlagen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>podman-run(1)<\/li>\n\n\n\n<li>podman-auto-update(1)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Systemd-Service-Unit mit podman-generate-systemd erstellen<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman generate systemd --name --new uptime-kuma\n# container-uptime-kuma.service\n# autogenerated by Podman 4.4.1\n# Tue Aug 22 21:29:46 CEST 2023\n\n&#91;Unit]\nDescription=Podman container-uptime-kuma.service\nDocumentation=man:podman-generate-systemd(1)\nWants=network-online.target\nAfter=network-online.target\nRequiresMountsFor=%t\/containers\n\n&#91;Service]\nEnvironment=PODMAN_SYSTEMD_UNIT=%n\nRestart=on-failure\nTimeoutStopSec=70\nExecStart=\/usr\/bin\/podman run \\\n\t--cidfile=%t\/%n.ctr-id \\\n\t--cgroups=no-conmon \\\n\t--rm \\\n\t--sdnotify=conmon \\\n\t--replace \\\n\t--label io.containers.autoupdate=registry \\\n\t-d \\\n\t-p 3001:3001 \\\n\t-v uptime-kuma:\/app\/data:Z \\\n\t--name=uptime-kuma docker.io\/louislam\/uptime-kuma:latest\nExecStop=\/usr\/bin\/podman stop \\\n\t--ignore -t 10 \\\n\t--cidfile=%t\/%n.ctr-id\nExecStopPost=\/usr\/bin\/podman rm \\\n\t-f \\\n\t--ignore -t 10 \\\n\t--cidfile=%t\/%n.ctr-id\nType=notify\nNotifyAccess=all\n\n&#91;Install]\nWantedBy=default.target<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der Befehl gibt den Inhalt der generierten Service-Unit auf STDOUT aus<\/li>\n\n\n\n<li>Die Option <code>--name<\/code> verwendet den Namen des Containers anstelle der Container-ID im Dateinamen der Service-Unit (hier: container-uptime-kuma.service)<\/li>\n\n\n\n<li>Wichtig ist die Option <code>--new<\/code>, um Container von aktualisierten Images erstellen zu k\u00f6nnen; ohne diese Option k\u00f6nnen Systemd-Units Container nur unter Verwendung des urspr\u00fcnglichen Images starten und stoppen und ein Auto-Update ist nicht m\u00f6glich<\/li>\n\n\n\n<li>Der folgende Code-Block f\u00fcgt dem Befehl die Option <code>--files<\/code> hinzu, um eine Service-Unit-Datei zu erstellen<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman generate systemd --name --new --files uptime-kuma\n\/home\/tronde\/container-uptime-kuma.service<\/code><\/pre>\n\n\n\n<p>Manpages zum Nachschlagen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>podman-auto-update(1)<\/li>\n\n\n\n<li>podman-generate-systemd(1)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Die erstellte Systemd-Unit aktivieren und starten<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mv -Z container-uptime-kuma.service ~\/.config\/systemd\/user\/container-uptime-kuma.service\n$ systemctl --user daemon-reload<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der erste Befehl verschiebt die Service-Unit in einen Pfad, wo <code>systemd<\/code> sie findet und einlesen kann<\/li>\n\n\n\n<li>Die Option <code>-Z<\/code> stellt sicher, dass die Datei den SELinux-Kontext des Zielverzeichnisses zugewiesen bekommt, andernfalls kann <code>systemd<\/code> die Datei ggf. nicht verarbeiten<\/li>\n\n\n\n<li>Durch den zweiten Befehl wird die Unit-Datei <code>systemd<\/code> bekannt gemacht<\/li>\n\n\n\n<li>An dieser Stelle ist der neue Systemd-Service geladen, jedoch inaktiv<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$ systemctl --user status container-uptime-kuma.service\n\u25cb container-uptime-kuma.service - Podman container-uptime-kuma.service\n     Loaded: loaded (\/home\/tronde\/.config\/systemd\/user\/container-uptime-kuma&gt;\n     Active: inactive (dead)\n       Docs: man:podman-generate-systemd(1)\n$ podman stop uptime-kuma\n$ podman rm uptime-kuma\n$ systemctl --user start container-uptime-kuma.service\n$ systemctl --user status container-uptime-kuma.service\n\u25cf container-uptime-kuma.service - Podman container-uptime-kuma.service     Loaded: loaded (\/home\/tronde\/.config\/systemd\/user\/container-uptime-kuma&gt;     Active: active (running) since Tue 2023-08-22 21:59:56 CEST; 14s ago\n\u2026<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der erste Befehl in obigen Code-Block pr\u00fcft den aktuellen Status des Service<\/li>\n\n\n\n<li>Der zweite und dritte Befehl stoppen und entfernen den laufenden Container, den wir <a href=\"#container-starten\" data-type=\"internal\" data-id=\"#container-starten\">weiter oben gestartet<\/a> haben<\/li>\n\n\n\n<li>Befehl Nummer 4 startet den Uptime-Kuma-Service<\/li>\n\n\n\n<li>Befehl Nummer 5 pr\u00fcft den neuen Status des Service; dieser ist nun up-and-running<\/li>\n<\/ul>\n\n\n\n<p>Manpages zum Nachschlagen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>mv(1)<\/li>\n\n\n\n<li>systemd.unit(5)<\/li>\n\n\n\n<li>systemctl(1)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Auf neue Container-Images pr\u00fcfen<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman auto-update --dry-run --format \"{{.Image}} {{.Updated}}\"\ndocker.io\/louislam\/uptime-kuma:latest false<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Durch die Option <code>--dry-run<\/code> wird sichergestellt, dass nur auf die Verf\u00fcgbarkeit neuer Images gepr\u00fcft wird, es werden jedoch keine Pull-Operationen ausgef\u00fchrt und keine Container neu erstellt<\/li>\n\n\n\n<li>Es wird eine Liste von Container-Images ausgegeben, die mit dem Label <code>io.containers.autoupdate=registry<\/code> gestartet wurden<\/li>\n\n\n\n<li>Die erste Spalte enth\u00e4lt den Image-Namen<\/li>\n\n\n\n<li>Die zweite Splate zeigt an, ob ein Update verf\u00fcgbar ist; in diesem Fall ist kein Update verf\u00fcgbar (<code>false<\/code>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"container-update\">Container (automatisch) aktualisieren<\/h2>\n\n\n\n<p>Wurde die <a href=\"#konfiguration\" data-type=\"internal\" data-id=\"#konfiguration\">Konfiguration<\/a> erfolgreich abgeschlossen, k\u00f6nnen die entsprechenden Container durch folgenden Befehl manuell aktualisiert werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ podman auto-update\n            UNIT                           CONTAINER                   IMAGE                                  POLICY      UPDATED\n            container-uptime-kuma.service  df21116f2573 (uptime-kuma)  docker.io\/louislam\/uptime-kuma:latest  registry    false<\/code><\/pre>\n\n\n\n<p>Leider ist aktuell kein Update verf\u00fcgbar, weshalb es hier nichts zu tun gibt und der Status von <code>Updated<\/code> gleich <code>false<\/code> ist.<\/p>\n\n\n\n<p>Podman bringt bei der Installation die beiden <code>systemd units<\/code> <code>podman-auto-update.timer<\/code> und <code>podman-auto-update.service<\/code> mit, welche zumindest unter RHEL 9 manuell aktiviert werden m\u00fcssen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ systemctl --user enable podman-auto-update.{service,timer}\nCreated symlink \/home\/tronde\/.config\/systemd\/user\/default.target.wants\/podman-auto-update.service \u2192 \/usr\/lib\/systemd\/user\/podman-auto-update.service.\nCreated symlink \/home\/tronde\/.config\/systemd\/user\/timers.target.wants\/podman-auto-update.timer \u2192 \/usr\/lib\/systemd\/user\/podman-auto-update.timer.\n\n$ systemctl --user start podman-auto-update.timer\n$ systemctl --user status podman-auto-update.{service,timer}\n\u25cb podman-auto-update.service - Podman auto-update service\n     Loaded: loaded (\/usr\/lib\/systemd\/user\/podman-auto-update.service; enabled; preset: disabled)\n     Active: inactive (dead)\nTriggeredBy: \u25cf podman-auto-update.timer\n       Docs: man:podman-auto-update(1)\n\n\u25cf podman-auto-update.timer - Podman auto-update timer\n     Loaded: loaded (\/usr\/lib\/systemd\/user\/podman-auto-update.timer; enabled; preset: disabled)\n     Active: active (waiting) since Sat 2023-09-02 20:56:09 CEST; 1s ago\n      Until: Sat 2023-09-02 20:56:09 CEST; 1s ago\n    Trigger: Sun 2023-09-03 00:12:22 CEST; 3h 16min left\n   Triggers: \u25cf podman-auto-update.service<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der Timer startet jeden Tag um Mitternacht den Auto-Update-Service<\/li>\n\n\n\n<li>Der Service pr\u00fcft, ob aktualisierte Container-Images verf\u00fcgbar sind und f\u00fchrt ggf. ein Update der Container durch<\/li>\n\n\n\n<li>Schl\u00e4gt ein Start nach Aktualisierung des Container-Images fehl, wird der Dienst automatisch von der vorherigen Image-Version gestartet; siehe <code>--rollback<\/code> in podman-auto-update(1)<\/li>\n\n\n\n<li>Der folgende Code-Block zeigt den Status, nachdem ein Update durchgef\u00fchrt wurde<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$ systemctl --user --no-pager -l status podman-auto-update\n\u25cb podman-auto-update.service - Podman auto-update service\n     Loaded: loaded (\/usr\/lib\/systemd\/user\/podman-auto-update.service; enabled; preset: disabled)\n     Active: inactive (dead) since Sun 2023-09-03 00:12:56 CEST; 7h ago\nTriggeredBy: \u25cf podman-auto-update.timer\n       Docs: man:podman-auto-update(1)\n    Process: 309875 ExecStart=\/usr\/bin\/podman auto-update (code=exited, status=0\/SUCCESS)\n    Process: 310009 ExecStartPost=\/usr\/bin\/podman image prune -f (code=exited, status=0\/SUCCESS)\n   Main PID: 309875 (code=exited, status=0\/SUCCESS)\n        CPU: 5.128s\n\nSep 03 00:12:50 example.com podman&#91;309875]: Copying config sha256:d56b643e048f2d351ed536ec9a588555dfd4c70de3c8d510ed61078a499ba464\nSep 03 00:12:50 example.com podman&#91;309875]: Writing manifest to image destination\nSep 03 00:12:50 example.com podman&#91;309875]: Storing signatures\nSep 03 00:12:51 example.com podman&#91;309875]: 2023-09-03 00:12:41.98296115 +0200 CEST m=+1.880671312 image pull  docker.io\/louislam\/uptime-kuma:latest\nSep 03 00:12:55 example.com podman&#91;309875]:             UNIT                           CONTAINER                   IMAGE                                  POLICY      UPDATED\nSep 03 00:12:55 example.com podman&#91;309875]:             container-uptime-kuma.service  814407c7312c (uptime-kuma)  docker.io\/louislam\/uptime-kuma:latest  registry    true\nSep 03 00:12:56 example.com podman&#91;310009]: fb3a3565b2da641402e99594e09b3cdadd1b9aa84f59e7960b9961662da5ff65\nSep 03 00:12:56 example.com podman&#91;310009]: 2023-09-03 00:12:55.421998943 +0200 CEST m=+0.020260134 image remove fb3a3565b2da641402e99594e09b3cdadd1b9aa84f59e7960b9961662da5ff65 \nSep 03 00:12:56 example.com systemd&#91;686]: Finished Podman auto-update service.\nSep 03 00:12:56 example.com systemd&#91;686]: podman-auto-update.service: Consumed 5.128s CPU time.<\/code><\/pre>\n\n\n\n<p>Ich hoffe, das Tutorial hat euch gefallen und konnte euch einen Eindruck vermitteln, wie man automatische Updates f\u00fcr Container konfigurieren kann.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Tutorial zeige ich euch, wie ihr eine automatische Aktualisierung f\u00fcr Container in rootless-Podman-Umgebungen konfigurieren und diese Container als systemd-Services verwalten k\u00f6nnt. Das Tutorial gliedert sich in folgende Abschnitte: Wer sich nicht f\u00fcr die m\u00f6glichen Anwendungsf\u00e4lle interessiert und lieber gleich starten m\u00f6chte, kann den ersten Abschnitt \u00fcberspringen. Die \u00fcbrigen Abschnitte sollten in der angegebenen<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/container-mit-podman-auto-update-automatisch-aktualisieren\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[3],"tags":[517,430,305,606,799,615],"class_list":["post-3618","post","type-post","status-publish","format-standard","hentry","category-tutorials","tag-container","tag-osbn","tag-planet","tag-podman","tag-podman-auto-update","tag-podman-generate-systemd"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3618"}],"version-history":[{"count":8,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3618\/revisions"}],"predecessor-version":[{"id":4000,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3618\/revisions\/4000"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}