1 Quand entrer dans un conteneur
Un conteneur n'est pas une boite noire. Tant qu'il est en cours d'exécution, on peut y ouvrir un shell pour observer ce qui s'y passe sans l'arrêter ni le reconstruire. Quatre situations classiques :
/var/log/.2 La commande clé : docker exec
La commande standard pour ouvrir un shell dans un conteneur en marche est :
execlance une nouvelle commande à l'intérieur d'un conteneur déjà démarré, sans interférer avec son processus principal.-i(interactive) garde la sortie standard ouverte pour vous laisser taper.-t(tty) attache un pseudo-terminal pour que le shell se comporte normalement (couleurs, complétion, retour à la ligne).bashest la commande à exécuter, ici un shell. Sur les images minimalistes, ce serash.
3 Procédure pas à pas
a3f2b9c1d4e7 httpd:alpine "httpd-foreground" 3 hours ago Up 3 hours 0.0.0.0:8080->80/tcp site-de-cours
site-de-cours). Ce nom est plus pratique que l'identifiant et reste stable tant que le conteneur n'est pas recréé.docker exec avec le nom récupéré. L'invite change pour signaler que vous êtes maintenant dans le conteneur.a3f2b9c1d4e7) au lieu du nom de votre machine. Si vous voyez votre nom d'utilisateur habituel, vous etes encore sur l'hote.
vim, pas de curl, pas de ps). Quelques exemples utiles :exit ferme uniquement le shell bash que vous aviez lancé via exec. Le processus principal du conteneur (Apache, dans cet exemple) continue de tourner. Vous pouvez le confirmer avec docker ps en revenant sur l'hôte.
4 Pièges courants et alternatives
Beaucoup d'images minimalistes (Alpine, distroless, scratch) n'embarquent pas bash. Essayez sh qui est presque toujours présent :
docker attach vous branche directement sur le processus principal du conteneur (PID 1), pas sur un nouveau shell. Si vous tapez exit ou Ctrl+C, vous tuez ce processus et donc le conteneur entier. À éviter pour de l'inspection. Pour quitter attach sans rien casser, il faut faire la séquence Ctrl+P puis Ctrl+Q. C'est exactement ce qui rend exec plus sûr au quotidien.
docker exec ne fonctionne que sur un conteneur en cours d'exécution. Si docker ps ne le montre pas, listez aussi les arrêtés avec docker ps -a. Pour inspecter un conteneur mort, deux choix : le redémarrer brièvement avec docker start nom puis exec, ou explorer son système de fichiers figé avec docker cp.
exec ouvre le shell avec l'utilisateur défini par l'image (souvent root). Pour entrer comme un utilisateur précis, ajoutez -u :