12. Administrer un conteneur
Le conteneur existe : il faut maintenant le piloter au quotidien — le démarrer et l'arrêter, y entrer, lire et modifier sa configuration, souvent à chaud.
12.1 Le cycle de vie d'un conteneur
Une fois votre conteneur créé, vous interagissez avec lui via un ensemble de commandes pct qui forment un vocabulaire cohérent. Comprendre ce cycle de vie est essentiel avant de passer aux opérations plus avancées.
Dans le Shell du nœud (interface web → votre nœud → Shell) :
pct list # lister tous les conteneurs et leur état
pct start 200 # démarrer le conteneur 200
pct stop 200 # arrêt immédiat (équivalent à couper l'alimentation)
pct shutdown 200 # arrêt propre, confié au systemd du conteneur (recommandé)
pct reboot 200 # redémarrer le conteneur
pct status 200 # afficher l'état actuel du conteneur
pct destroy 200 # supprimer le conteneur (doit être arrêté au préalable)
Résultat de pct list :
VMID Status Lock Name
200 running webserver
La distinction entre pct stop et pct shutdown est importante. pct stop coupe brutalement le conteneur sans lui laisser le temps de terminer ses processus proprement — c'est l'équivalent de débrancher une machine physique. pct shutdown demande au premier processus du conteneur, son systemd, d'arrêter le système : les services s'arrêtent dans l'ordre, les fichiers sont fermés, exactement comme un poweroff tapé à l'intérieur.
Un conteneur n'a pas de matériel virtuel, donc pas de signal ACPI (Advanced Configuration and Power Interface, gestion de l'alimentation) comme une VM. C'est le noyau partagé qui transmet la demande.
Si le conteneur ne s'est pas arrêté au bout de 60 secondes, la commande échoue — l'option --forceStop 1 le coupe alors d'office. Préférez toujours pct shutdown pour éviter la corruption des données.
Les deux états d'un conteneur et les commandes qui le font passer de l'un à l'autre. Les deux flèches d'arrêt n'ont pas le même sens : shutdown laisse les services se terminer, stop les coupe. Cliquez sur une transition pour le détail.
12.2 Accéder à un conteneur et l'administrer
12.2.1 La console interactive
Pour accéder à un shell dans votre conteneur, Proxmox propose deux méthodes. La première, pct enter, ouvre une session interactive directement dans le contexte du conteneur, en tant que root. Ni mot de passe ni réseau : elle passe par le noyau de l'hôte, pas par SSH.
Dans le Shell du nœud (interface web → votre nœud → Shell) :
# Ouvrir une session shell interactive dans le conteneur 200
pct enter 200
Résultat attendu :
root@webserver:/#
Vous êtes maintenant à l'intérieur du conteneur. Le prompt change pour refléter le hostname du conteneur.
Depuis cette session, vous pouvez travailler comme sur n'importe quel système Debian : installer des paquets, éditer des fichiers de configuration, gérer des services. Pour quitter, tapez exit ou Ctrl+D.
Ne confondez pas avec pct console 200, qui ouvre la console texte du conteneur, celle d'un écran branché. Elle demande un identifiant et un mot de passe ; on en sort par Ctrl+a puis q. pct enter est plus direct, mais ne fonctionne que depuis le nœud qui héberge le conteneur.
12.2.2 Exécuter des commandes sans entrer dans le conteneur
La seconde méthode, pct exec, permet d'exécuter une commande dans le conteneur sans ouvrir de session interactive — très utile pour les scripts ou les opérations ponctuelles :
Dans le Shell du nœud (interface web → votre nœud → Shell) :
# Exécuter bash dans le conteneur (session interactive via exec)
pct exec 200 -- bash
# Mettre à jour les paquets sans entrer dans le conteneur
pct exec 200 -- apt update
# Vérifier que nginx fonctionne
pct exec 200 -- systemctl status nginx
Résultat de apt update :
Hit:1 http://deb.debian.org/debian trixie InRelease
Hit:2 http://deb.debian.org/debian-security trixie-security InRelease
Reading package lists... Done
Le double tiret -- est une convention Unix qui sépare les options de pct exec de la commande à exécuter à l'intérieur du conteneur. Sans ce séparateur, certaines options pourraient être interprétées par pct lui-même plutôt que transmises à la commande cible.
Cliquez sur chaque commande : ce qu'elle ouvre, et comment on en sort.
Équivalent Docker : pct enter correspond à docker exec -it avec un shell interactif. pct exec correspond à docker exec pour une commande ponctuelle. Si vous avez déjà travaillé avec Docker, ces deux commandes vous seront immédiatement familières.
12.3 Configuration et modification à chaud
12.3.1 Lire la configuration d'un conteneur
Chaque conteneur est décrit par un fichier texte, /etc/pve/lxc/<VMID>.conf : la source de vérité pour toutes ses options. Comme tout /etc/pve/, il est répliqué sur tous les nœuds d'un cluster.
Dans le Shell du nœud (interface web → votre nœud → Shell) :
# Afficher la configuration effective du conteneur 200
pct config 200
Résultat attendu :
arch: amd64
cores: 1
hostname: webserver
memory: 512
net0: name=eth0,bridge=vmbr0,gw=10.44.1.1,hwaddr=BC:24:11:xx:xx:xx,ip=10.44.1.50/24,type=veth
ostype: debian
parent: avant-upgrade
rootfs: local-lvm:vm-200-disk-0,size=8G
swap: 512
unprivileged: 1
pct config montre l'état courant. Le fichier brut (cat /etc/pve/lxc/200.conf) contient en plus une section [nom] par snapshot, qui fige la configuration au moment de la prise. C'est là qu'on regarde le jour où un retour arrière semble avoir « perdu » un réglage.
N'éditez pas ce fichier à la main pendant que le conteneur tourne : Proxmox peut le réécrire et perdre la modification. On passe par pct set ou par l'interface.
12.3.2 Modifier les ressources à chaud
L'un des avantages des conteneurs LXC par rapport aux VM est la possibilité de modifier certaines ressources sans redémarrer. Proxmox exploite les cgroups v2 pour modifier à chaud la mémoire allouée et le nombre de cœurs CPU :
Dans le Shell du nœud (interface web → votre nœud → Shell) :
# Augmenter la RAM à 1024 Mo sans redémarrer le conteneur
pct set 200 --memory 1024
# Passer le conteneur à 2 cœurs CPU
pct set 200 --cores 2
# Vérifier que les changements sont pris en compte
pct config 200
Résultat de pct config après modification :
arch: amd64
cores: 2
hostname: webserver
memory: 1024
...
La commande pct set modifie simultanément le fichier de configuration et les paramètres actifs du conteneur via les cgroups. Les changements sont persistants : si le conteneur redémarre, il utilisera les nouvelles valeurs.
Attention : on peut augmenter la RAM à chaud. Mais la réduire en dessous de la mémoire utilisée par le conteneur peut provoquer des erreurs, ou forcer l'OOM (Out Of Memory) killer à tuer des processus. Vérifiez la consommation mémoire actuelle avant de réduire.
12.3.3 Partager un dossier de l'hôte
Un conteneur peut recevoir, en plus de son disque, un point de montage : un répertoire de l'hôte (pct set 200 --mp0 /srv/partage,mp=/data) ou un volume Proxmox dédié (pct set 200 --mp1 local-lvm:5,mp=/var/lib/mysql).
Le volume Proxmox suit le conteneur dans ses sauvegardes, snapshots et migrations. Le répertoire de l'hôte, lui, n'appartient pas au conteneur : il n'est pas sauvegardé avec lui, et il empêche la migration vers un autre nœud.
Dossier partagé et conteneur non privilégié : le root du conteneur correspond à l'UID 100000 de l'hôte. Un répertoire qui appartient à root sur l'hôte reste donc inaccessible en écriture depuis le conteneur : chown 100000:100000 /srv/partage sur l'hôte avant de démarrer le conteneur.
À retenir : le cycle de vie passe par pct start/stop/shutdown/reboot. On entre dans un conteneur par pct enter (session) ou on y lance une commande par pct exec. Sa configuration vit dans /etc/pve/lxc/<id>.conf ; on la modifie par pct set ou par l'interface, souvent à chaud (mémoire, cœurs).
Proxmox VE — TSSR