MISE À JOUR
Méthode la plus simple: utiliser docker exec
Docker version 1.3 ou plus récente prend en charge la commande exec
qui se comporte comme nsenter
. Cette commande peut exécuter un nouveau processus dans un conteneur déjà en cours d'exécution (le processus PID 1 doit déjà être exécuté sur le conteneur). Vous pouvez exécuter /bin/bash
pour explorer l'état du conteneur:
docker exec -t -i mycontainer /bin/bash
voir la documentation de la ligne de commande Docker
Méthode alternative 1
Instantané
Vous pouvez évaluer le système de fichiers conteneur de cette façon:
# find ID of your running container:
docker ps
# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot
# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash
De cette façon, vous pouvez évaluer le système de fichiers du conteneur en cours d'exécution au moment précis. Le conteneur est toujours en cours d'exécution, aucune modification future n'est incluse.
Vous pouvez ensuite supprimer l'instantané à l'aide de (le système de fichiers du conteneur en cours d'exécution n'est pas affecté!):
docker rmi mysnapshot
Méthode alternative 2
ssh
Si vous avez besoin d'un accès continu, vous pouvez installer sshd sur votre conteneur et exécuter le démon sshd:
docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
# you need to find out which port to connect:
docker ps
De cette façon, vous pouvez exécuter votre application à l'aide de ssh (connectez-vous et exécutez ce que vous voulez).
MISE À JOUR: Méthode alternative 3
nsenter
Utilisation nsenter
, voir https://web.archive.org/web/20160305150559/http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/
La version courte est: avec nsenter, vous pouvez obtenir un shell dans un conteneur existant, même si ce conteneur n'exécute pas SSH ou tout type de démon à usage spécial
docker exec <container> bash
. Donc, vous venez d'ouvrir un shell à l'intérieur du conteneur.