Zum Inhalt springen
Podman Auto-Update mit Registry-Login

Podman Auto-Update mit Registry-Login

Voraussetzungen

  • Container läuft als systemd-Unit (Quadlet)
  • Image mit vollständigem Registry-Pfad, z. B. registry.example.com/team/app:latest
  • Auto-Update-Policy am Container gesetzt
/etc/containers/systemd/app.container
[Container]
Image=registry.example.com/team/app:latest
AutoUpdate=registry

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start app.service
PolicyVerhalten
registryDigest in der Registry prüfen, neues Image pullen, Unit neu starten
locallokal neueres Image (manueller Pull/Build) verwenden, Unit neu starten

Fehlerbild

podman[1234]: Error: checking image updates for container 3f2a...: Requesting bearer token: invalid status code from registry 403 (Forbidden)
  • podman-auto-update.service findet keinen Login für die Registry und fragt anonym an
  • podman login in der Shell hilft nicht zwingend: der Login landet für root in /run/containers/0/auth.json (tmpfs, nach Reboot weg)

Suchreihenfolge der Zugangsdaten

ReihenfolgePfadHinweis
1--authfile, REGISTRY_AUTH_FILE oder Label io.containers.autoupdate.authfileexplizit gesetzt
2${XDG_RUNTIME_DIR}/containers/auth.jsonDefault von podman login, flüchtig
3~/.config/containers/auth.jsonpersistent
4~/.docker/config.jsonDocker-kompatibel

Lösung

/etc/containers/systemd/app.container
[Container]
Image=registry.example.com/team/app:latest
AutoUpdate=registry
Label=io.containers.autoupdate.authfile=/etc/containers/auth.json

Login in eigene Auth-Datei

podman login --authfile /etc/containers/auth.json -u <user> --password-stdin registry.example.com < token.txt
chmod 600 /etc/containers/auth.json

Testen

BeschreibungCommand
Dry-Run mit Auth-Dateipodman auto-update --dry-run --authfile /etc/containers/auth.json
Service wie der Timer startensystemctl start podman-auto-update.service
Ergebnisjournalctl -u podman-auto-update.service -e
Timer aktivierensystemctl enable --now podman-auto-update.timer
nächster Laufsystemctl list-timers podman-auto-update.timer
Ein podman auto-update --dry-run in der Shell kennt das Environment= aus dem Drop-in nicht. Entweder --authfile mitgeben oder den Service direkt starten.

Rootless

rootrootless
systemctl edit podman-auto-update.servicesystemctl --user edit podman-auto-update.service
/etc/containers/systemd/~/.config/containers/systemd/
/run/containers/0/auth.json/run/user/<UID>/containers/auth.json
  • Timer ohne aktive Anmeldung: loginctl enable-linger <user>
Zuletzt aktualisiert am