Kennisbank / Podman rootless Quadlet

Podman in beheer: rootless containers, Quadlet en Docker-migratie

Auteur: DEWOLF.IT

Podman rootless en Quadlet bieden een manier om containers onder een eigen account met systemd te beheren. De overstap vanaf Docker vraagt wel aandacht voor storage, netwerkgedrag, rechten en de levensduur van de gebruikerssessie.

Scope: RHEL 9 met een Podman-versie die Quadlet ondersteunt en cgroup v2. Oudere RHEL/Podman-versies vragen een ander ontwerp.

Toepassing. RHEL 9 met een geschikte Podman/Quadlet-versie en cgroup v2. Controleer opties in man podman-systemd.unit op de host: upstream-documentatie kan functies bevatten die de geïnstalleerde RHEL-versie nog niet heeft.

Probleem en achtergrond: containercompatibiliteit is geen beheercompatibiliteit

Een OCI-image dat onder Docker draaide kan een goede start zijn voor Podman. De operationele omgeving verandert echter: daemonafhankelijkheden, volumes, netwerk, API-clients en servicesturing kunnen anders werken. Breng daarom eerst het contract van de workload in kaart: poorten, data, identiteit, secrets, healthcheck en startupvolgorde.

Maak het doelontwerp klein en toetsbaar. Een enkele container op een host met systemd is een andere beheervraag dan een cluster met scheduling en automatische failover. Quadlet verzorgt de integratie met systemd, maar neemt geen volledige orkestratielaag of applicatieherstel over.

1. Maak images en registrytoegang reproduceerbaar

podman version
podman info
podman images --digests
podman ps --all

Gebruik volledig gekwalificeerde imageverwijzingen. Een korte naam kan afhankelijk zijn van de lokale registry-/aliasconfiguratie. Leg vast welke registry is toegestaan en wie de image bouwt, scant en onderhoudt. Een tag kan veranderen; een digest identificeert een concrete inhoud. Digest pinning vervangt geen proces om nieuwe, herstelde images gecontroleerd uit te rollen.

# Generieke registry; vervang de naam door jouw toegestane registry.
podman login registry.example.net

Voer credentials in via de prompt of het goedgekeurde secretmechanisme. Het standaard authbestand op Linux kan onder XDG_RUNTIME_DIR staan en een reboot niet overleven. Configureer daarom bewust persistente authenticatie als unattended pulls nodig zijn, met beperkte rechten en rotatie. De podman-login-handleiding beschrijft de authfile-keuze.

2. Begrijp de grenzen van rootless

Rootless Podman gebruikt een gebruikerscontext en user namespaces. Controleer de beschikbare subordinate UID-/GID-ranges en de storageconfiguratie. Containers die de gebruiker beheert staan los van de rootful opslag; sudo podman toont dus niet noodzakelijk dezelfde containers. Zie Podman rootless mode.

id
cat /etc/subuid
cat /etc/subgid
podman info --format '{{.Host.CgroupsVersion}}'
podman unshare cat /proc/self/uid_map

Plan voor een service een eigen account en voer de user-commando’s in de sessie van dat account uit. Een login-shell met sudo is niet altijd hetzelfde als een goed ingerichte user manager. Gebruik voor het beheer een reproduceerbare account- en sessievoorziening. Verander UID-mappings niet ad hoc op een host met bestaande containervolumes.

Rootless betekent niet risicoloos: de container kan nog steeds bij resources waarvoor het hostaccount rechten heeft. Begrens volumes en netwerktoegang, gebruik een passend serviceaccount en publiceer geen poorten op alle interfaces als alleen lokale toegang nodig is.

3. Beheer een rootless container met Quadlet

Plaats het bestand onder ~/.config/containers/systemd/ van het serviceaccount. Dit voorbeeld gebruikt een volledig gekwalificeerde publieke nginx-image en bindt alleen aan localhost. Het is een demonstratie; kies voor productie een goedgekeurde image en een vastgelegde digest.

# ~/.config/containers/systemd/web.container
[Unit]
Description=Example rootless web container

[Container]
Image=docker.io/library/nginx:stable
PublishPort=127.0.0.1:8080:80

[Service]
Restart=on-failure
RestartSec=10s
TimeoutStartSec=300

[Install]
WantedBy=default.target
# Uitvoeren als het betreffende serviceaccount.
systemctl --user daemon-reload
systemctl --user start web.service
systemctl --user status web.service --no-pager
journalctl --user -u web.service -b --no-pager
curl --fail http://127.0.0.1:8080/

De generator maakt web.service uit web.container. Enable niet de gegenereerde service met systemctl enable; de [Install]-sectie van het Quadlet-bestand legt de startkoppeling vast. Voor starten zonder actieve login kan een beheerder linger toestaan voor het serviceaccount. Beslis dat bewust en test een reboot. Zie de Quadlet-documentatie.

Trek images vooraf op de host als startup afhankelijk is van een trage registry. Een ruimere TimeoutStartSec kan helpen, maar maskeert geen onbereikbare registry of foutieve credentials. Als de gegenereerde service ontbreekt, controleer de bestandslocatie, syntax en ondersteunde Quadlet-opties voordat je systemd gaat aanpassen.

4. Valideer data en labels vóór de Docker-migratie

Inventory van het Docker-deployment omvat image, command, environment, ports, volumeinhoud, healthcheck en restart-afspraak. Neem ook de clients van de Docker-socket mee. Een API-compatibiliteitslaag is geen garantie dat ieder hulpmiddel identiek functioneert. Test Compose- en netwerkfunctionaliteit met de werkelijk gebruikte toolversies.

Kopieer data via een applicatieconsistente backup/restore en controleer UID/GID binnen de container én op de host. Kopieer geen runtime-storageboom als generiek migratiepad. Bij een bind mount onder SELinux betekent :Z een private relabel en :z een gedeelde relabel; pas die niet toe op systeemdirectories of op data die andere diensten met een eigen label nodig hebben. Zie de Red Hat-containerhandleiding.

5. Accepteer functioneren en herstel

Test read/write, restart, hostreboot, logging en een image-update met dezelfde data. Bewaak applicatiefouten en de grootte van volumes en logs. Plan bij een update hoe je de oude image kunt starten, maar controleer ook of de nieuwe applicatie een onomkeerbare datamigratie uitvoert. De oude digest alleen is dan onvoldoende herstel.

Enterprise-aandachtspunten en valkuilen

Documenteer account, imageherkomst, digest, registryauthenticatie en onderhoudseigenaar. Gebruik gecontroleerde imagepromotie in plaats van ongezien iedere tagwijziging op productie te trekken. Bepaal wie diskgebruik opruimt; een algemene prune kan herstelimages of andere workloads raken.

Test rootless netwerk- en resourcebeperkingen in de echte omgeving. Hanteer een concreet acceptatiecriterium voor de functionele endpoint en een afgesproken stop-/restoreprocedure. Daarmee wordt de migratie een beheerbare wijziging in plaats van alleen een geslaagde podman run.

Bronnen en versiecontrole

Technische referenties geraadpleegd op 30 september 2026. Controleer bij uitvoering de documentatie en manpages van de geïnstalleerde versie.

Podman en rootless mode
Registryauthenticatie
Quadlet en systemd
RHEL — containerbeheer en volumecontexten

Gerelateerde artikelen

SELinux AVC-denials oplossen: contexts, booleans en policy
systemd troubleshooting: services, dependencies en restart-beleid
Linux performance: CPU, geheugen en I/O systematisch onderzoeken

Ondersteuning bij jouw platform

Wil je deze aanpak vertalen naar jouw omgeving? Bekijk Red Hat Enterprise Linux of neem contact op met DEWOLF.IT.

Translate »