Aller au contenu
English
English
Conteneurs & Orchestration medium

Installer Podman : Ubuntu/Debian, Fedora, macOS, Windows (WSL2/Hyper-V)

35 min de lecture

logo podman

Ce guide vous permet d'installer Podman sur votre système en mode rootless (sans droits root). Que vous soyez sur Linux, macOS ou Windows, vous aurez un environnement de conteneurs fonctionnel et sécurisé. À la fin, vous saurez :

  • Installer Podman sur votre distribution Linux
  • Configurer le mode rootless (exécution sans droits root)
  • Utiliser Podman Machine sur macOS et Windows
  • Vérifier que tout fonctionne avec un conteneur de test
PlateformePrérequis
LinuxCompte utilisateur standard, accès sudo pour l'installation
macOSmacOS 13+ (Ventura), Homebrew installé
WindowsWindows 10/11, WSL 2 activé ou Hyper-V disponible

Avant d'installer, comprenons pourquoi le mode rootless est important.

Par défaut, Podman s'exécute sans droits root (administrateur). Les conteneurs tournent donc avec les permissions de votre compte, pas avec celles de l'administrateur système : un conteneur compromis n'obtient rien de plus que ce que vous pouvez déjà faire.

Pourquoi c'est mieux ?

AspectMode root (traditionnel)Mode rootless (Podman par défaut)
SécuritéUn conteneur compromis peut affecter tout le systèmeUn conteneur compromis n'a que vos droits utilisateur
InstallationNécessite des droits adminFonctionne avec un compte standard
Partage de machineConflits possibles entre utilisateursChaque utilisateur a ses propres conteneurs

Avant de vous lancer, identifiez la méthode adaptée à votre situation :

Fedora et RHEL ont Podman nativement, c'est la meilleure expérience car les versions sont toujours à jour.

  1. Installer Podman

    Fenêtre de terminal
    sudo dnf install -y podman
  2. Vérifier la version

    Fenêtre de terminal
    podman version

    Sortie attendue (les numéros varient selon la distro) :

    Client: Podman Engine
    Version: 5.x.x
    API Version: 5.x.x
    Go Version: go1.22.x
    OS/Arch: linux/amd64
  3. Tester avec un conteneur

    Fenêtre de terminal
    podman run --rm docker.io/library/alpine:3.22@sha256:5291449c3df73caf6ed85e649dec1b9e818b39a5d8c871e97afc13e9cd5e8fa8 echo "Hello Podman!"

    Sortie attendue :

    Hello Podman!

Après l'installation, vous devez configurer le mode rootless pour profiter de la sécurité maximale.

Le mode rootless utilise les user namespaces de Linux. Pour que ça fonctionne, votre utilisateur doit avoir des plages d'UID/GID allouées.

Sur une distribution récente, vous n'aurez probablement rien à faire : les plages sont posées à la création du compte. Vérifié sur Debian 13, juste après apt install podman et sans aucune commande supplémentaire, le compte portait déjà ansible:165536:65536 dans les deux fichiers. Les étapes qui suivent servent alors de contrôle, et ne deviennent une vraie manipulation que sur un système plus ancien ou un compte créé à la main.

  1. Vérifier que les fichiers existent et contiennent votre utilisateur

    Fenêtre de terminal
    grep $USER /etc/subuid /etc/subgid

    Sortie attendue (avec votre nom d'utilisateur) :

    /etc/subuid:bob:100000:65536
    /etc/subgid:bob:100000:65536

    Cela signifie que l'utilisateur bob peut utiliser 65536 UIDs à partir de 100000.

  2. Si les lignes n'existent pas, ajoutez-les :

    Fenêtre de terminal
    sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
  3. Initialiser le namespace utilisateur

    Fenêtre de terminal
    podman system migrate
Fenêtre de terminal
podman info --format '{{.Host.Security.Rootless}}'

Sortie attendue :

true

Contrairement à Docker qui stocke tout dans /var/lib/docker/ (accessible uniquement par root), Podman rootless utilise votre dossier personnel :

Fenêtre de terminal
podman info --format '{{.Store.GraphRoot}}'

Sortie :

/home/bob/.local/share/containers/storage

Cela signifie que chaque utilisateur a son propre espace de stockage d'images, totalement isolé.

macOS ne peut pas exécuter de conteneurs Linux nativement (le noyau est différent). Podman utilise donc une machine virtuelle Linux légère appelée Podman Machine.

  1. Installer Homebrew si ce n'est pas déjà fait

    La page d'installation officielle propose un curl directement branché sur un interpréteur. Ce guide ne le reproduit pas, pour deux raisons : cette forme exécute un script avant que vous l'ayez lu, et une interruption réseau en cours de téléchargement peut faire exécuter un fichier tronqué. Téléchargez d'abord, relisez, exécutez ensuite :

    Fenêtre de terminal
    curl -fsSL -o /tmp/homebrew-install.sh \
    https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh
    less /tmp/homebrew-install.sh # lecture avant exécution
    /bin/bash /tmp/homebrew-install.sh

    Le principe vaut bien au-delà de Homebrew : tout installateur distribué par script distant se télécharge, se relit, puis s'exécute.

  2. Installer Podman

    Fenêtre de terminal
    brew install podman
  3. Créer et démarrer la machine virtuelle

    Fenêtre de terminal
    podman machine init
    podman machine start

    La première exécution télécharge une image Linux (~300 Mo) et crée la VM.

  4. Vérifier que tout fonctionne

    Fenêtre de terminal
    podman version
    podman run --rm docker.io/library/alpine:3.22@sha256:5291449c3df73caf6ed85e649dec1b9e818b39a5d8c871e97afc13e9cd5e8fa8 echo "Hello Podman on macOS!"

Vous pouvez personnaliser les ressources de la VM lors de la création :

Fenêtre de terminal
# Machine avec 4 CPUs, 4 Go de RAM, 50 Go de disque
podman machine init --cpus 4 --memory 4096 --disk-size 50
# Démarrer
podman machine start
CommandeDescription
podman machine listLister les machines
podman machine startDémarrer la machine par défaut
podman machine stopArrêter la machine
podman machine sshSe connecter en SSH à la VM
podman machine rmSupprimer une machine
podman machine inspectDétails de configuration

Windows, comme macOS, nécessite une machine virtuelle pour exécuter les conteneurs Linux.

WSL 2 (Windows Subsystem for Linux) offre les meilleures performances.

  1. Activer WSL 2 (si pas déjà fait)

    Ouvrez PowerShell en tant qu'administrateur :

    Fenêtre de terminal
    wsl --install

    Redémarrez si demandé.

  2. Installer Podman via winget

    Fenêtre de terminal
    winget install RedHat.Podman

    Ou téléchargez l'installateur MSI depuis github.com/containers/podman/releases.

  3. Créer la machine Podman

    Ouvrez un terminal (PowerShell ou CMD) :

    Fenêtre de terminal
    podman machine init
    podman machine start
  4. Tester

    Fenêtre de terminal
    podman run --rm docker.io/library/alpine:3.22@sha256:5291449c3df73caf6ed85e649dec1b9e818b39a5d8c871e97afc13e9cd5e8fa8 echo "Hello Podman on Windows!"

Si vous préférez une interface graphique, Podman Desktop est disponible sur toutes les plateformes.

PlateformeMéthode recommandéeAlternative
macOSTélécharger .dmg (recommandé)brew install --cask podman-desktop
Windowswinget install RedHat.Podman-DesktopTélécharger .exe
LinuxFlatpak : flatpak install flathub io.podman_desktop.PodmanDesktopAppImage disponible
  • Gestion visuelle des conteneurs, images, pods
  • Gestion des machines Podman (macOS/Windows)
  • Intégration avec Kubernetes
  • Extensions (Kind, OpenShift, etc.)

Vérification de l'installation (toutes plateformes)

Section intitulée « Vérification de l'installation (toutes plateformes) »

Quelle que soit votre plateforme, effectuez ces vérifications :

  1. Version installée

    Fenêtre de terminal
    podman version

    Vérifiez que la version est au moins la 5.4. Les branches 5.8 et 6.1 sont les deux séries maintenues aujourd'hui.

  2. Informations système

    Fenêtre de terminal
    podman info

    Points à vérifier :

    • host.security.rootless: true (Linux)
    • store.graphDriverName: overlay
    • host.ociRuntime.name: crun ou runc
  3. Test d'exécution

    Fenêtre de terminal
    podman run --rm docker.io/library/alpine:3.22@sha256:5291449c3df73caf6ed85e649dec1b9e818b39a5d8c871e97afc13e9cd5e8fa8 cat /etc/os-release

    Sortie attendue :

    NAME="Alpine Linux"
    ID=alpine
    VERSION_ID=3.22.6
    PRETTY_NAME="Alpine Linux v3.22"
    ...
  4. Test de pull depuis plusieurs registres

    Podman ne présume aucun registre par défaut, contrairement à Docker qui complète silencieusement en docker.io. Tirer une image depuis trois registres différents vérifie que la résolution de nom et le réseau fonctionnent partout, pas seulement sur Docker Hub.

    Fenêtre de terminal
    # Docker Hub
    podman pull docker.io/library/nginx:1.29.3-alpine@sha256:b3c656d55d7ad751196f21b7fd2e8d4da9cb430e32f646adcf92441b72f82b14
    # Quay.io (Red Hat)
    podman pull quay.io/podman/hello:latest@sha256:41316c18917a27a359ee3191fd8f43559d30592f82a144bbc59d9d44790f6e7a
    # GitHub Container Registry
    podman pull ghcr.io/astral-sh/uv:0.9.9@sha256:f6e3549ed287fee0ddde2460a2a74a2d74366f84b04aaa34c1f19fec40da8652
SymptômeCause probableSolution
ERRO[0000] cannot find UID/GIDsubuid/subgid non configuréssudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
Error: rootless modeNamespace utilisateur non initialisépodman system migrate
machine not running (macOS/Windows)Machine Podman arrêtéepodman machine start
Error: dial unixSocket Podman inaccessibleVérifier que le service fonctionne
permission denied sur les fichiersProblème de mapping UIDUtiliser :U ou --userns=keep-id
no systemd user session available, puis Falling back to --cgroup-manager=cgroupfsSession sans gestionnaire systemd utilisateur, typiquement une connexion SSH non interactivesudo loginctl enable-linger $USER, puis rouvrir une session

« no systemd user session available » : le conteneur tourne quand même

Section intitulée « « no systemd user session available » : le conteneur tourne quand même »

C'est le message qui inquiète le plus à la première utilisation, et ce n'est pas une erreur. Mesuré sur Debian 13 depuis une session SSH, le tout premier podman run affiche huit lignes d'avertissement avant la sortie attendue :

level=warning msg="The cgroupv2 manager is set to systemd but there is no systemd user session available"
level=warning msg="Alternatively, you can enable lingering with: `loginctl enable-linger 1001` (possibly as root)"
level=warning msg="Falling back to --cgroup-manager=cgroupfs"

Podman bascule sur cgroupfs et le conteneur s'exécute normalement : rien n'est cassé. Le remède est celui que le message indique lui-même, mais il porte un piège qu'il passe sous silence :

MomentLignes d'avertissement
Avant loginctl enable-linger8
Après, dans la même session8, inchangé
Dans la session suivante0

Le réglage ne prend pas effet dans la session où vous le posez. Rejouer la commande aussitôt donne l'impression qu'elle ne sert à rien : il faut se déconnecter et se reconnecter pour qu'un gestionnaire systemd utilisateur existe.

En mode rootless, les problèmes de permissions sur les volumes montés sont la difficulté la plus fréquente : les UIDs du conteneur ne correspondent pas à ceux de l'hôte, et un fichier parfaitement lisible d'un côté ne l'est plus de l'autre.

Recette 1 : --userns=keep-id (aligner les UIDs)

Cette option fait correspondre votre UID réel avec l'UID dans le conteneur :

Fenêtre de terminal
podman run --rm --userns=keep-id -v ./data:/data:rw docker.io/library/alpine:3.22@sha256:5291449c3df73caf6ed85e649dec1b9e818b39a5d8c871e97afc13e9cd5e8fa8 ls -la /data

→ Votre utilisateur (ex: UID 1000) sera aussi UID 1000 dans le conteneur.

Recette 2 : suffixe :U (chown automatique)

Le suffixe :U sur un volume indique à Podman de changer récursivement le propriétaire des fichiers pour correspondre à l'UID du conteneur :

Fenêtre de terminal
podman run --rm -v ./data:/data:U docker.io/library/alpine:3.22@sha256:5291449c3df73caf6ed85e649dec1b9e818b39a5d8c871e97afc13e9cd5e8fa8 ls -la /data

Si quelque chose ne fonctionne pas :

Fenêtre de terminal
# Linux
podman system reset
# macOS/Windows
podman machine stop
podman machine rm
podman machine init
podman machine start

Après installation, vérifiez que tout fonctionne avec cette checklist :

VérificationCommandeRésultat attendu
Versionpodman versionVersion 5.4 ou supérieure
Runtimepodman info --format '{{.Host.OCIRuntime.Name}}'crun ou runc
Storage driverpodman info --format '{{.Store.GraphDriverName}}'overlay
Rootless (Linux)podman info --format '{{.Host.Security.Rootless}}'true
Test conteneurpodman run --rm docker.io/library/alpine:3.22@sha256:5291449c3df73caf6ed85e649dec1b9e818b39a5d8c871e97afc13e9cd5e8fa8 echo okok
Machine (macOS/Win)podman machine listUne machine running
SSH machinepodman machine ssh uname -aInfos Linux affichées
  1. Podman est rootless par défaut, plus sécurisé, chaque utilisateur a ses propres conteneurs
  2. Linux : installation native ; sur une distribution récente les plages /etc/subuid et /etc/subgid sont déjà posées, il suffit de les vérifier
  3. macOS/Windows : utiliser Podman Machine qui crée une VM Linux légère
  4. Ubuntu/Debian : les dépôts natifs peuvent être en retard, et l'ancien dépôt OBS libcontainers est fermé ; pour une version plus récente, changez de version de distribution ou passez par Homebrew sur Linux
  5. Vérifier avec podman info que le mode rootless est actif et le runtime correct
  6. Problèmes de permissions : utiliser --userns=keep-id ou le suffixe :U

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens ce site gratuitement, sans publicité, sans profilage et sans compte à créer. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn