Probleme commandes podman en rootles

Il arrive parfois que les commandes Podman échouent pour un utilisateur rootless. Ce problème survient lorsque le répertoire runtime rootless de l’utilisateur n’est pas accessible ou possède de mauvaises permissions.

Failed to obtain podman configuration: mkdir /run/user/XXXX/libpod: permission denied

Origine du problème

Podman rootless utilise le répertoire $XDG_RUNTIME_DIR pour stocker ses données et sockets temporaires (libpod, run, etc.). Par défaut, ce répertoire se situe dans /run/user/<UID> et doit appartenir à l’utilisateur qui lance podman.

Si le répertoire appartient à un autre utilisateur ou si les permissions sont incorrectes, Podman rootless ne peut pas créer ses fichiers, et toute commande rootless échoue.

Exemple avec un simple podman ps qui échoue ou ne renvoie rien :

$ sudo podman ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ podman ps --all
Failed to obtain podman configuration: mkdir /run/user/5014/libpod: permission denied

Car ici l’utilisateur courant n’a aucun droit sur son runtime :

$ echo $XDG_RUNTIME_DIR
/run/user/5014
$ ls -ld $XDG_RUNTIME_DIR
drwx------ 3 autre-utilisateur wheel 80 Oct 16 11:17 /run/user/5014

Restaurer la propriété et les permissions

La variable $XDG_RUNTIME_DIR doit toujours être accessible en écriture pour l’utilisateur rootless afin que Podman fonctionne correctement.

Vérifier que le répertoire runtime correspond à l’utilisateur courant :

$ echo $XDG_RUNTIME_DIR
$ ls -ld $XDG_RUNTIME_DIR

Si nécessaire, corriger :

$ sudo chown -R $(whoami):$(id -gn) $XDG_RUNTIME_DIR
$ chmod 700 $XDG_RUNTIME_DIR

Les commandes Podman doivent maintenant fonctionner correctement :

$ podman ps --all

Forcer la création d’un runtime rootless temporaire

Si $XDG_RUNTIME_DIR est manquant ou inaccessible, on peut créer un répertoire temporaire pour le runtime rootless, pratique pour les shells non-interactifs ou les scripts. Ce runtime reste temporaire et sera perdu après reboot ou nettoyage du /tmp.

$ export XDG_RUNTIME_DIR=/tmp/podman-runtime-$(id -u)
$ mkdir -p $XDG_RUNTIME_DIR
$ chmod 700 $XDG_RUNTIME_DIR

Les commandes Podman devraient maintenant renvoyer des informations :

$ podman ps --all

Documentations

Podman

Partager