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.targetsystemctl daemon-reload
systemctl start app.service| Policy | Verhalten |
|---|---|
registry | Digest in der Registry prüfen, neues Image pullen, Unit neu starten |
local | lokal 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.servicefindet keinen Login für die Registry und fragt anonym anpodman loginin der Shell hilft nicht zwingend: der Login landet für root in/run/containers/0/auth.json(tmpfs, nach Reboot weg)
Suchreihenfolge der Zugangsdaten
| Reihenfolge | Pfad | Hinweis |
|---|---|---|
| 1 | --authfile, REGISTRY_AUTH_FILE oder Label io.containers.autoupdate.authfile | explizit gesetzt |
| 2 | ${XDG_RUNTIME_DIR}/containers/auth.json | Default von podman login, flüchtig |
| 3 | ~/.config/containers/auth.json | persistent |
| 4 | ~/.docker/config.json | Docker-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.jsonLogin 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.jsonTesten
| Beschreibung | Command |
|---|---|
| Dry-Run mit Auth-Datei | podman auto-update --dry-run --authfile /etc/containers/auth.json |
| Service wie der Timer starten | systemctl start podman-auto-update.service |
| Ergebnis | journalctl -u podman-auto-update.service -e |
| Timer aktivieren | systemctl enable --now podman-auto-update.timer |
| nächster Lauf | systemctl 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
| root | rootless |
|---|---|
systemctl edit podman-auto-update.service | systemctl --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