Je veux pouvoir inspecter le contenu d'un conteneur Docker (lecture seule). Une manière élégante de le faire serait de monter le contenu du conteneur dans un répertoire. Je parle de monter le contenu d'un conteneur sur l'hôte, pas de monter un dossier sur l'hôte à l'intérieur d'un conteneur.
Je peux voir qu'il y a actuellement deux pilotes de stockage dans Docker: aufs et btrfs. Ma propre installation Docker utilise btrfs, et la navigation vers / var / lib / docker / btrfs / subvolumes me montre un répertoire par conteneur Docker sur le système. Il s'agit cependant d'un détail d'implémentation de Docker et il ne semble pas correct de monter - lier ces répertoires ailleurs.
Existe-t-il un moyen approprié de le faire ou dois-je patcher Docker pour prendre en charge ce type de montures?
la source
Réponses:
Jetez un oeil à
docker export
.Pour répertorier rapidement les fichiers dans votre conteneur:
Exporter:
Ou pour regarder un fichier:
Docker 1.8 prend en charge cp :
https://docs.docker.com/reference/commandline/cp/
mise à jour: vous devez ssh sur votre machine docker lorsque vous l'exécutez.
la source
tar x PATH-IN-CONTAINER
, il extraira uniquement les fichiers dont vous avez besoin.tar
archive entière est toujours créée dans le démon Docker, et la création prend plusieurs minutes ...docker export ubuntu|tar -t|grep etc/network
prend par exemple 3 secondes pour moi.ubuntu
image est vraiment petite ...Vous pouvez utiliser la validation Docker pour conserver l'état actuel de votre conteneur dans une nouvelle image et démarrer un conteneur interactif à partir de cette image pour inspecter le contenu.
De la documentation:
J'espère que cela t'aides.
la source
Vous pouvez utiliser nsenter pour exécuter votre programme d'inspection (qui doit probablement déjà être inclus dans le conteneur) à l'intérieur d'un conteneur / espace de noms. Mais pour monter le système de fichiers conteneur comme on le voit à l'intérieur, vous devez monter l'image d'origine et toutes les couches if est aufs, ou l'action équivalente pour le mappeur de périphériques, btrfs et les autres (futurs) moteurs de stockage utilisés, différents dans chaque cas. Il serait probablement plus efficace de laisser Docker faire le travail pour vous, exactement comme il est censé le faire, et d'utiliser nsenter pour effectuer l'inspection à l'intérieur du conteneur.
Il existe d'autres approches. docker diff affiche les fichiers modifiés dans ce conteneur, si vous souhaitez voir ce qui a changé au lieu de ce qui était dans l'image d'origine.
Et pour les données qui doivent être persistantes et inspectables, un meilleur schéma serait probablement de les avoir dans un volume dans le conteneur, et de les monter soit sur le système de fichiers réel, soit dans un conteneur de données pur, ou dans le même conteneur, mais que vous pouvez lancer un autre conteneur avec le programme d'inspection en montant ces volumes.
la source
EDIT: J'ai essayé la solution ci-dessous et malheureusement, cela n'a pas bien fonctionné pour moi dans la pratique. Le système de fichiers monté ne reflétait pas avec précision le système de fichiers du conteneur (même avec
cache=no
). Je ne sais pas si c'est un problème fondamental ou si je fais quelque chose de mal.Vous pouvez installer sshd dans l'image de docker et l'utiliser
docker exec
pour exécuter un service ssh (/usr/sbin/sshd -D
) sur le conteneur de docker (notez que le port SSH 22 du conteneur de docker doit être exposé).Ensuite, utilisez
docker cp
pour copier votre clé publique ssh dans le/root/.ssh/authorized_keys
répertoire du conteneur Docker.Enfin, utilisez
docker inspect
pour trouver l'adresse IP du conteneur et monter le système de fichiers du conteneur à l'aide deVous devez écrire un script pour que ce travail soit confortable dans la pratique.
la source