
Ce guide vous accompagne pour créer votre premier conteneur LXC dans
Proxmox VE. Vous allez comprendre pourquoi choisir un conteneur plutôt qu’une
VM, maîtriser les options de l’assistant de création (privileged vs
unprivileged, nesting), et apprendre à gérer vos conteneurs en CLI avec pct.
À la fin, vous aurez un conteneur Debian opérationnel, prêt à héberger vos
services.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- La différence entre conteneur LXC et VM KVM : quand choisir l’un ou l’autre
- Privileged vs unprivileged : comprendre les implications de sécurité
- Nesting : autoriser Docker ou d’autres conteneurs à l’intérieur
- Créer un conteneur via l’interface web et en CLI avec
pct - Les templates : où les trouver et comment les télécharger
- Les commandes
pctessentielles pour la gestion quotidienne
Prérequis
Section intitulée « Prérequis »| Élément | Détail |
|---|---|
| Proxmox VE installé | Version 8.x ou 9.x — guide d’installation |
| Interface web maîtrisée | Les 3 niveaux Datacenter → Node → Guest — guide interface |
| Stockage configuré | Au moins un stockage avec le type de contenu “CT Templates” |
| Réseau fonctionnel | Un bridge configuré (vmbr0 par défaut) |
Concepts clés avant de commencer
Section intitulée « Concepts clés avant de commencer »Conteneur LXC vs VM KVM : quelle différence ?
Section intitulée « Conteneur LXC vs VM KVM : quelle différence ? »Un conteneur LXC (Linux Container) partage le noyau Linux de l’hôte Proxmox. Contrairement à une VM qui émule un ordinateur complet avec son propre noyau, le conteneur n’est qu’un processus isolé. Résultat : démarrage instantané, empreinte mémoire minimale, performances natives.
| Critère | VM KVM | Conteneur LXC |
|---|---|---|
| Noyau | Propre noyau (Linux, Windows, BSD…) | Noyau de l’hôte (Linux uniquement) |
| Démarrage | 10-60 secondes | 1-2 secondes |
| RAM minimum | ~256 Mo | ~32 Mo |
| Isolation | Forte (hyperviseur) | Moyenne (namespaces + cgroups) |
| Overhead | ~2-5% CPU, RAM fixe | Quasi nul |
| OS supportés | Tous (Windows, Linux, BSD…) | Linux uniquement |
| Live migration | Oui | Non (restart migration) |
Analogie : si une VM est un appartement avec ses propres murs, plomberie et électricité, un conteneur est une chambre dans une colocation — plus léger, mais on partage les parties communes (le noyau).
Privileged vs unprivileged : le choix sécurité
Section intitulée « Privileged vs unprivileged : le choix sécurité »C’est la question la plus importante lors de la création d’un conteneur.
| Mode | UID root dans le conteneur | Sécurité | Cas d’usage |
|---|---|---|---|
| Unprivileged (défaut) | Mappé vers UID 100000+ | Forte | 99% des cas — toujours préférable |
| Privileged | = root de l’hôte (UID 0) | Faible | Cas spéciaux uniquement |
Unprivileged : le root du conteneur (UID 0) est mappé vers un utilisateur non-privilégié de l’hôte (par exemple UID 100000). Même si un attaquant s’échappe du conteneur, il atterrit avec les droits d’un utilisateur lambda. C’est le mode par défaut depuis Proxmox VE 4.0 — gardez-le sauf cas précis.
Privileged : le root du conteneur = le root de l’hôte. Une faille d’évasion = accès root à votre serveur. L’équipe LXC considère ces conteneurs comme non sécurisés par design. N’utilisez que dans un environnement de confiance.
Nesting : conteneurs dans le conteneur
Section intitulée « Nesting : conteneurs dans le conteneur »Le nesting expose /proc et /sys au conteneur, ce qui permet :
- Docker ou Podman à l’intérieur du conteneur
- D’autres conteneurs LXC imbriqués
- Le fonctionnement de systemd pour isoler ses services
Nesting + unprivileged est la combinaison recommandée pour faire tourner Docker dans un conteneur Proxmox.
Télécharger un template
Section intitulée « Télécharger un template »Avant de créer un conteneur, vous avez besoin d’un template — une image de base contenant un système Linux minimal.
-
Accéder au gestionnaire de templates
Dans l’interface Proxmox, allez dans : Node → local (ou votre stockage) → CT Templates

-
Télécharger un template depuis les dépôts
Cliquez sur le bouton Templates. Une liste de templates officiels apparaît. Sélectionnez par exemple debian-12-standard puis cliquez sur Download.

Le téléchargement prend quelques secondes. Le template apparaît ensuite dans la liste.
En CLI avec pveam :
# Mettre à jour la liste des templates disponiblespveam update
# Lister les templates système disponiblespveam available --section system
# Télécharger un template vers le stockage localpveam download local debian-12-standard_12.7-1_amd64.tar.zst
# Lister les templates téléchargéspveam list localCréer un conteneur depuis l’interface web
Section intitulée « Créer un conteneur depuis l’interface web »-
Lancer l’assistant de création
Cliquez sur le bouton bleu Create CT en haut à droite de l’interface. Un assistant en 7 étapes s’ouvre.
-
Onglet General : identité du conteneur
Option Valeur recommandée Explication Node (votre nœud) Serveur où le CT sera créé CT ID (proposé auto) Numéro unique — gardez celui proposé Hostname debian-testNom d’hôte du conteneur Unprivileged container ✅ Coché (défaut) Mode sécurisé — gardez-le Nesting ✅ Coché si Docker Nécessaire pour Docker/systemd Password (définir) Mot de passe root du conteneur 
-
Onglet Template : choisir l’image de base
- Storage :
local(ou votre stockage avec les templates) - Template :
debian-12-standard_12.7-1_amd64.tar.zst

- Storage :
-
Onglet Disks : stockage du conteneur
Option Valeur recommandée Explication Storage local-lvmStockage pour le rootfs Disk size (GiB) 88 Go suffisent pour un conteneur de base 
-
Onglet CPU : processeur
Option Valeur recommandée Explication Cores 11 cœur suffit pour la plupart des services Le conteneur peut utiliser tous les cœurs de l’hôte si vous ne spécifiez pas de limite. La valeur “Cores” définit le maximum.

-
Onglet Memory : mémoire vive
Option Valeur recommandée Explication Memory (MiB) 512512 Mo — suffisant pour un conteneur minimal Swap (MiB) 512Swap alloué au conteneur 
-
Onglet Network : réseau
Option Valeur recommandée Explication Name eth0Nom de l’interface dans le conteneur Bridge vmbr0Bridge par défaut de Proxmox IPv4 DHCPou IP statiqueChoisissez selon votre réseau Firewall ✅ Coché Active le firewall Proxmox Pour une IP statique : entrez l’adresse au format CIDR (ex:
192.168.1.100/24) et la gateway (ex:192.168.1.1).
-
Onglet DNS : résolution de noms
Option Valeur recommandée Explication DNS domain (laisser vide) Hérite de l’hôte DNS servers (laisser vide) Hérite de l’hôte Par défaut, le conteneur utilise les DNS de l’hôte Proxmox. Vous pouvez spécifier des DNS personnalisés (ex:
1.1.1.1pour Cloudflare). -
Onglet Confirm : vérifier et créer
L’assistant affiche un récapitulatif. Vérifiez que Unprivileged est bien coché, puis cliquez sur Finish.
Optionnel : cochez Start after created pour démarrer immédiatement.

Créer le même conteneur en ligne de commande
Section intitulée « Créer le même conteneur en ligne de commande »L’interface web appelle pct create. Voici l’équivalent CLI :
# Télécharger le template (si pas déjà fait)pveam download local debian-12-standard_12.7-1_amd64.tar.zst
# Créer le conteneurpct create 101 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \ --hostname debian-test \ --memory 512 \ --swap 512 \ --cores 1 \ --rootfs local-lvm:8 \ --net0 name=eth0,bridge=vmbr0,ip=dhcp,firewall=1 \ --unprivileged 1 \ --features nesting=1 \ --password "VotreMotDePasseSecurise"
# Démarrer le conteneurpct start 101Accéder au conteneur
Section intitulée « Accéder au conteneur »Trois méthodes pour ouvrir un shell dans votre conteneur :
Dans l’interface web : CT → Console. Une session getty s’ouvre, connectez-vous avec root et le mot de passe défini.

Depuis l’hôte Proxmox, entrez directement dans le namespace du conteneur :
# Entrer dans le conteneur (shell root)pct enter 101Vous êtes immédiatement root dans le conteneur, sans authentification. C’est la méthode la plus rapide pour l’administration.
Si SSH est configuré dans le conteneur, connectez-vous classiquement :
ssh root@<ip-du-conteneur>Pour connaître l’IP du conteneur :
pct exec 101 -- ip addr show eth0Configurer le nesting pour Docker
Section intitulée « Configurer le nesting pour Docker »Si vous voulez faire tourner Docker dans un conteneur LXC, voici la configuration complète :
-
Activer nesting et keyctl
Fenêtre de terminal # Si le conteneur est déjà créépct set 101 --features nesting=1,keyctl=1- nesting : expose
/procet/sys - keyctl : nécessaire pour Docker (gestion des clés du noyau)
- nesting : expose
-
Redémarrer le conteneur
Fenêtre de terminal pct reboot 101 -
Installer Docker dans le conteneur
Fenêtre de terminal pct enter 101# Dans le conteneurapt update && apt install -y curlcurl -fsSL https://get.docker.com | sh -
Vérifier que Docker fonctionne
Fenêtre de terminal docker run hello-world
Monter un répertoire de l’hôte (bind mount)
Section intitulée « Monter un répertoire de l’hôte (bind mount) »Un bind mount permet d’accéder à un dossier de l’hôte Proxmox depuis le conteneur. Utile pour partager des données ou accéder à un stockage NFS.
# Créer le dossier sur l'hôtemkdir -p /mnt/bindmounts/shared
# Ajouter le bind mount au conteneur (conteneur arrêté)pct set 101 --mp0 /mnt/bindmounts/shared,mp=/sharedLe dossier /mnt/bindmounts/shared de l’hôte devient /shared dans le
conteneur.
Aide-mémoire pct
Section intitulée « Aide-mémoire pct »Les commandes pct essentielles pour gérer vos conteneurs :
| Action | Commande | Notes |
|---|---|---|
| Créer un CT | pct create <ctid> <template> ... | Voir exemple complet ci-dessus |
| Lister les CT | pct list | Affiche ID, statut, nom |
| Démarrer | pct start <ctid> | |
| Arrêter proprement | pct shutdown <ctid> | |
| Forcer l’arrêt | pct stop <ctid> | |
| Redémarrer | pct reboot <ctid> | |
| Entrer dans le CT | pct enter <ctid> | Shell root immédiat |
| Exécuter une commande | pct exec <ctid> -- <cmd> | Ex: pct exec 101 -- hostname |
| Voir la config | pct config <ctid> | |
| Modifier un paramètre | pct set <ctid> --<option> <val> | Ex: pct set 101 --memory 1024 |
| Redimensionner disque | pct resize <ctid> rootfs +5G | Agrandir de 5 Go |
| Cloner un CT | pct clone <ctid> <newctid> | Clone complet |
| Créer un snapshot | pct snapshot <ctid> <nom> | |
| Supprimer un CT | pct destroy <ctid> | ⚠️ Supprime aussi les données |
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| CT ne démarre pas : “permission denied” | Stockage incompatible avec unprivileged | Utilisez un stockage de type dir ou zfspool (pas certains LVM) |
| Pas de réseau | Bridge mal configuré | Vérifiez que vmbr0 existe et est up sur l’hôte |
| Docker échoue : “keyctl” error | Feature keyctl manquante | pct set <ctid> --features keyctl=1 puis reboot |
| Erreur mapping UID | Bind mount avec unprivileged | Ajustez les permissions du dossier sur l’hôte ou passez en privileged |
| CT démarre mais services échouent | Nesting manquant pour systemd | pct set <ctid> --features nesting=1 |
| Template non trouvé | Pas téléchargé ou mauvais storage | pveam list local pour vérifier |
| ”Resource busy” à la suppression | CT encore en cours d’exécution | pct stop <ctid> avant pct destroy |
| Erreur “TASK ERROR: CT is locked” | Opération précédente interrompue | pct unlock <ctid> |
À retenir
Section intitulée « À retenir »-
Conteneur LXC = Linux uniquement, mais 10× plus léger qu’une VM. Idéal pour services Linux, Pi-hole, Home Assistant, Nginx…
-
Unprivileged par défaut : gardez ce mode sauf cas très spécifique. C’est beaucoup plus sécurisé.
-
Nesting + keyctl pour Docker : configurez ces features si vous voulez faire tourner Docker dans un conteneur.
-
pct enterest votre meilleur ami : accès root instantané au conteneur sans authentification. -
Redimensionnement à chaud : contrairement aux VM, vous pouvez agrandir le disque d’un conteneur en cours d’exécution avec
pct resize. -
Bind mounts avec précaution : ne montez jamais de dossiers système. Créez une arborescence dédiée sous
/mnt/bindmounts/. -
Templates TurnKey : pensez-y pour déployer rapidement une application préconfigurée (WordPress, GitLab…).