Aller au contenu

Podman 6.0.0 : rupture technique, changements cassants et migration

Cryptolab.re
Auteur
Cryptolab.re
Cryptolab est un blog personnel où je documente mes expérimentations techniques : infra, self-hosting, réseau, crypto et projets parfois inutiles, souvent instructifs.
Sommaire

Podman 6.0.0 est disponible depuis fin juin 2026, avec un billet de présentation publié début juillet. C’est une version majeure qui rompt avec plusieurs fondations historiques du projet : fin du support cgroups v1, retrait de slirp4netns et iptables, abandon de BoltDB pour SQLite, et refonte complète du parsing des fichiers de configuration.

Si vous utilisez Podman en production ou dans des pipelines CI, cette montée de version demande une vraie préparation. Ce n’est pas une simple mise à jour. Plusieurs changements sont cassants et peuvent rendre une installation inutilisable si la migration n’est pas anticipée.

En bref
#

  • Podman 6.0.0 publié fin juin 2026, puis détaillé dans le blog Podman début juillet.
  • Breaking changes majeurs : fin du support cgroups v1, iptables, BoltDB, slirp4netns et CNI.
  • Réseau : Netavark + Aardvark v2.0.0 obligatoires, Pasta devient le stack réseau rootless par défaut.
  • Configuration : refonte complète du parsing des fichiers (containers.conf, registries.conf, storage.conf) avec support des drop-in et lookup unifié sous /usr/share/containers.
  • CVE-2026-57231 (CVSS 7.5) : une image malveillante peut faire fuiter les variables d’environnement de l’hôte vers le conteneur. Corrigé dans Podman 5.8.4 et 6.0.0.
  • Quadlet : passage majeur (sous-répertoires, API REST, nouvelles options .volume).
  • Migration : nécessite Buildah 1.44.0, Skopeo 1.23, Netavark/Aardvark v2.0.0.
  • Import path changé : github.com/containers/podman/v5 devient go.podman.io/podman/v6.

Pour qui migre depuis Docker ou démarre sur Podman, la version 6 simplifie la compatibilité avec l’API Docker (support v1.44, meilleure isolation réseau par défaut). Pour les utilisateurs existants, chaque élément ci-dessous doit être vérifié avant de mettre à jour.

Les changements cassants
#

Podman 6.0.0 supprime plusieurs composants qui étaient en voie de dépréciation depuis Podman 4.x et 5.x.

Réseau : fin de slirp4netns et iptables
#

Le stack réseau rootless historique slirp4netns est supprimé. Podman 6 utilise Pasta comme unique backend rootless. Du côté firewall, iptables n’est plus supporté : il faut nftables. Et pour la couche réseau, CNI est définitivement remplacé par Netavark.

Concrètement, si votre distribution utilise encore iptables ou si vous dépendez de slirp4netns, Podman 6 refusera de fonctionner. La migration passe par :

  • Installation du paquet netavark et aardvark-dns en version >= 2.0.0.
  • Activation de nftables.
  • Configuration du backend réseau dans containers.conf : network_backend = "netavark".

Vérifiez ces prérequis avant la mise à jour :

# Version actuelle de netavark
netavark --version

# Backend nftables actif
nft list ruleset | head -5

# Configuration Podman actuelle
podman info --format '{{.Host.NetworkBackend}}'

Base de données : BoltDB remplacé par SQLite
#

Podman utilisait BoltDB comme base de données interne pour les conteneurs, pods et volumes. BoltDB est supprimé dans Podman 6. La migration vers SQLite est automatique au premier lancement, mais elle est irréversible sans restauration manuelle.

Avant de mettre à jour, il est prudent de sauvegarder l’état actuel :

# Lister tous les conteneurs, pods et volumes avant migration
podman ps -a > ~/podman-containers-pre-v6.txt
podman pod ls > ~/podman-pods-pre-v6.txt
podman volume ls > ~/podman-volumes-pre-v6.txt

Si vous devez revenir en arrière, ces listes vous permettront de reconstruire l’état manuellement. Il n’existe pas de commande podman system migrate --backward.

Système : fin de cgroups v1
#

Podman 6 ne fonctionne que sur les systèmes utilisant cgroups v2. Les distributions récentes (Fedora 31+, Ubuntu 21.10+, Debian 11+, RHEL 9+) utilisent déjà cgroups v2 par défaut. Si vous êtes encore sur un noyau configuré en cgroups v1, Podman 6 ne démarrera pas.

Vérifiez :

stat -fc %T /sys/fs/cgroup/
# Doit retourner "cgroup2fs"

Support matériel : fin des Intel Mac et Windows 10
#

Podman 6 ne supporte plus les Mac Intel ni Windows 10. Les machines virtuelles créées avec podman machine sous Windows 10 devront être recréées sur un hôte compatible.

Import path modifié
#

Pour les projets Go utilisant Podman comme bibliotheque, le chemin d’import change :

  • Ancien : github.com/containers/podman/v5
  • Nouveau : go.podman.io/podman/v6

Ce changement accompagne le déplacement du projet dans une organisation CNCF (Cloud Native Computing Foundation). Les consommateurs du module Go doivent mettre à jour leurs imports et régénérer leurs fichiers de dépendances.

CVE-2026-57231 : fuite de variables d’environnement
#

L’avis de sécurité GHSA-4hq8-gpf5-8p68 (CVE-2026-57231, CVSS 7.5 - High) corrige une vulnérabilité où une image conteneur malveillante peut forcer Podman à transmettre les variables d’environnement de l’hôte dans le conteneur.

Fonctionnement
#

Le bug exploite la réutilisation du même parseur pour les variables --env VAR (lecture depuis l’environnement hôte) et les variables définies dans le Env de la configuration d’image. Si l’image déclare une variable avec uniquement une clé, sans valeur (exemple : KEY sans =value), Podman traite cette clé comme s’il s’agissait d’un --env KEY, et va donc lire la valeur depuis l’hôte. Pire : l’opérateur * dans une variable (exemple : VAR*) provoque le passage de toutes les variables correspondant au motif. Une image peut donc exfiltrer l’intégralité des variables d’environnement de la session qui lance le conteneur.

Versions affectees
#

  • Podman >= v1.8.1, <= v5.8.3
  • Corrigé dans Podman v5.8.4 et v6.0.0

Risque reel
#

Le risque est maximal dans des environnements où des utilisateurs non privilégiés lancent des images non vérifiées, comme des pipelines CI multi-locataires ou des plateformes de type “container-as-a-service”. En local ou avec des images de confiance, l’impact est faible.

Verification
#

Avant de lancer une image non signée, inspectez ses variables d’environnement :

podman image inspect --format '{{.Config.Env}}' <image>
# Si une entree ne contient pas de signe =, l'image est potentiellement malveillante

Après mise à jour vers Podman 6.0.0, les images avec des entrées Env invalides (sans =) sont rejetées au lancement avec une erreur explicite.

Les nouveautes importantes
#

Au-delà des ruptures, Podman 6 apporte plusieurs améliorations concrètes.

Quadlet refondu
#

Les fichiers Quadlet connaissent leur évolution la plus importante depuis leur introduction. Les fichiers associés sont maintenant placés dans des sous-répertoires pour éviter les bugs de nettoyage. Les .volume units gagnent les options UID=, GID= et Options=. Deux nouveaux chemins de recherche sont ajoutés pour les packagers : /usr/share/containers/systemd/users et /usr/share/containers/systemd/users/${UID}.

La commande podman quadlet list dispose d’un nouvel alias podman quadlet ls et d’un filtre status=.

Podman machine amélioré
#

Nouvelle commande podman machine os update pour mettre à jour l’OS de la VM. Les machines Linux montent maintenant les volumes depuis l’hôte via systemd (les VM existantes doivent être recréées). Sous Windows Hyper-V, démarrer et arrêter la VM ne nécessite plus de privilèges administrateur. Sur Mac, le provider par défaut passe de applehv à libkrun.

Toutes les commandes podman machine peuvent désormais opérer sur les VM de n’importe quel provider, indépendamment du provider courant. Une nouvelle option --import-native-ca importe les CA de confiance de l’hôte dans la VM.

Compatibilité Docker renforcée
#

L’API Docker compatible passe en version v1.44. L’isolation réseau est maintenant activée par défaut, ce qui aligne Podman sur le comportement Docker. Les formats de sortie --format='{{json .Labels}}' pour podman ps, podman pod ps et podman volume ls retournent des paires key=value séparées par des virgules (comme Docker). Le MemorySwappiness passe à nil quand il n’est pas défini explicitement (comme Docker).

Nouvelles options réseau
#

Les conteneurs peuvent désormais définir plusieurs adresses IP statiques en passant ip= plusieurs fois à --net. La commande podman network create supporte les routes blackhole, unreachable et prohibit, ce qui permet de bloquer l’accès de conteneurs à certains sous-réseaux sans passer par un firewall externe.

Support AMD GPU
#

L’option --gpus fonctionne maintenant avec les GPU AMD, et pas seulement NVIDIA.

Migration depuis Podman 5.x
#

La mise à jour vers Podman 6.0.0 n’est pas anodine. Voici une check-list pour éviter les mauvaises surprises.

Avant la mise a jour
#

  1. Sauvegarder l’inventaire des conteneurs, pods et volumes.
  2. Vérifier le backend réseau : Podman 6 nécessite Netavark v2.0.0.
  3. Vérifier le firewall : nftables doit être actif, pas iptables.
  4. Vérifier cgroups : le système doit utiliser cgroups v2.
  5. Vérifier le stockage : si vous utilisez encore le driver overlay avec des options incompatibles, la migration SQLite peut échouer.
  6. Tester sur un environnement non critique avant de déployer en production.
# Script de verification pre-migration
echo "=== Backend réseau ==="
podman info --format '{{.Host.NetworkBackend}}'

echo "=== Version netavark ==="
netavark --version 2>/dev/null || echo "netavark non installé"

echo "=== Firewall ==="
iptables --version 2>/dev/null && echo "ATTENTION : iptables present"
nft --version 2>/dev/null && echo "nftables disponible"

echo "=== cgroups ==="
if [ "$(stat -fc %T /sys/fs/cgroup/)" = "cgroup2fs" ]; then
    echo "cgroups v2 OK"
else
    echo "ATTENTION : cgroups v1 détecté"
fi

echo "=== Stockage ==="
podman info --format '{{.Store.GraphDriverName}}'

Apres la mise a jour
#

Au premier lancement de Podman 6, la migration de BoltDB vers SQLite s’exécute automatiquement. Surveillez les logs :

sudo journalctl -u podman --since "5 min ago" | grep -i migrate

En cas d’échec, Podman 6 ne démarre pas. Vous devrez alors soit restaurer une sauvegarde de la base BoltDB (avant migration) soit recréer l’état à partir de votre inventaire.

Paquets necessaires
#

Podman 6 doit être installé avec les versions exactes des outils compagnons :

  • Buildah >= 1.44.0
  • Skopeo >= 1.23
  • Netavark >= 2.0.0
  • Aardvark-dns >= 2.0.0
  • container-libs common >= v0.68.0

Certaines distributions récentes intégreront ces versions rapidement, mais ce point dépendra du cycle de publication de chaque mainteneur. Sur des versions plus anciennes, attendez-vous à devoir utiliser les dépôts recommandés par votre distribution ou à différer la migration.

Vérifier son installation après migration
#

Une fois Podman 6 installé, quelques commandes permettent de valider le bon fonctionnement :

# Version installée
podman version

# Vérifier le backend réseau
podman info --format '{{.Host.NetworkBackend}}'
# Doit retourner "netavark"

# Vérifier le backend rootless
podman info --format '{{.Host.RootlessNetworkBackend}}'
# Doit retourner "pasta"

# Vérifier le driver de stockage
podman info --format '{{.Store.GraphDriverName}}'
# Doit retourner "overlay"

# Tester un conteneur simple
podman run --rm docker.io/library/alpine:latest echo "Podman 6 OK"

Conclusion
#

Podman 6.0.0 est une version nécessaire. Les changements cassants étaient attendus après des années de dépréciation. Le projet en profite pour unifier son code de configuration, simplifier sa pile réseau et se préparer à une gouvernance CNCF.

Pour qui maintient Podman en production, le message est clair : ne pas monter en version sans avoir vérifié chaque prérequis. La migration n’est pas complexe, mais elle est irréversible sur certains aspects (BoltDB vers SQLite, recréation des VM).

Pour qui débute avec Podman, la version 6 est un excellent point de départ : elle corrige des années de dette technique et offre une compatibilité Docker renforcée.

Sources
#

Articles connexes

Debian 14 Forky : builds reproductibles, loong64 et impacts côté serveur

Debian 14, nom de code Forky, est la future version stable de Debian. Au 14 mai 2026, elle est encore en branche testing. Aucune date de sortie n’est annoncée, et les étapes du freeze ne sont pas encore planifiées publiquement. Le bulletin de l’équipe Release publié le 10 mai 2026 apporte tout de même plusieurs informations importantes : les builds reproductibles deviennent une contrainte plus forte dans la migration des paquets, les binNMU passent par davantage de tests automatiques, et l’architecture loong64 arrive dans l’archive Debian. Pour un serveur de production, la conclusion immédiate est simple : Debian 13 Trixie reste la version stable à utiliser. Debian 14 est intéressante à tester dès maintenant, mais pas à déployer comme base principale tant qu’elle n’est pas publiée en stable.

Ubuntu Server 26.04 LTS : ce qu'il faut savoir avant de migrer

··2469 mots·12 mins
Ubuntu 26.04 LTS est sortie le 23 avril 2026 sous le nom Resolute Raccoon. Pour un poste desktop, c’est une nouvelle LTS avec GNOME 50, Wayland et quelques changements visibles. Pour un serveur, c’est autre chose : une base qui peut rester en production pendant plusieurs années, avec un nouveau noyau, une pile crypto plus stricte, des paquets serveur mis à jour, des changements de comportement sur des services courants, et une stratégie de support à bien comprendre avant de lancer un do-release-upgrade. Je regarde donc Ubuntu 26.04 LTS sous l’angle qui m’intéresse le plus ici : serveurs, VPS, homelab, cloud, sécurité et migration propre.

Docker Compose : arrêtez de mettre latest dans vos fichiers

Le tag latest est confortable. On écrit un compose.yml, on lance docker compose up -d, et le service démarre. Pas besoin de choisir une version de PostgreSQL, Redis, Traefik, Gitea, Vaultwarden ou n’importe quelle application auto-hébergée. Le problème, c’est que latest ne veut pas dire “dernière version stable adaptée à mon environnement”. Ça veut seulement dire : “ce tag pointe vers quelque chose dans le registre au moment où Docker le résout”. Ce quelque chose peut changer sans que votre fichier Compose change. Pour une stack de test, ce n’est pas très grave. Pour une base de données, un reverse proxy exposé, un service d’authentification ou une application avec des volumes persistants, c’est une mauvaise convention d’exploitation. Le vrai sujet n’est pas Docker. C’est la reproductibilité.