Explorer le Panneau contenant le système de fichiers de
J'ai remarqué avec le panneau que j'ai besoin de comprendre ce qui se passe à l'intérieur d'un conteneur ou quels fichiers existent là-bas. Un exemple en est le téléchargement des images à partir du menu fixe index - vous n'avez pas la moindre idée de ce que l'image contient de sorte qu'il est impossible de démarrer l'application.
Ce serait l'idéal est d'être en mesure de ssh en eux ou équivalent. Est-il un outil pour ce faire, ou est-ce mon conceptualisation de docker mal à penser que je devrais être capable de faire cela.
- Dans les dernières versions de Docker, quelque chose comme cela est possible:
docker exec <container> bash
. Alors, vous vous ouvrez un shell à l'intérieur du conteneur. - l'exécution de bash sur un conteneur ne fonctionne que si bash est installé à l'intérieur du conteneur
- De même, vous pouvez faire:
docker exec <container> ls <dir path>
etdocker exec <container> cat <file path>
. Pour bash cependant, ajouter le-it
options. - Question similaire: stackoverflow.com/questions/44769315/...
- exactement. À cause de cela, j'ai trouvé que le seul bon moyen pour ce faire est avec
docker image save image_name > image.tar
comme indiqué dans la réponse de @Gaurav24. - Il Docker tout va fournir une INTERFACE utilisateur puis d'avoir un navigateur de fichiers pour l'exécution de conteneurs serait un bon élément à avoir là-dedans.
- Si vous voulez à la sortie du système de fichiers contenu lors de la construction de votre panneau de fichier, voir ce post
Vous devez vous connecter pour publier un commentaire.
Méthode 1: snapshoting
Vous pouvez évaluer conteneur de système de fichiers de cette façon:
De cette façon, vous pouvez évaluer le système de fichiers de l'exécution du conteneur dans l'heure précise moment. Le conteneur est toujours en cours d'exécution, pas de changements futurs sont inclus.
Vous pouvez ensuite supprimer un instantané à l'aide (système de fichiers de l'exécution de conteneur n'est pas affecté!):
Méthode 2: ssh
Si vous avez besoin d'un accès continu, vous pouvez installer le disque hybride ssd à votre conteneur et exécuter le démon sshd:
De cette façon, vous pouvez exécuter votre application à l'aide de ssh (se connecter et exécuter ce que vous voulez).
Mise à JOUR - Méthode 3: nsenter
Utilisation
nsenter
, voir http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/Mise à JOUR - Méthode 4: docker exec
Docker version 1.3 ou ultérieure prend en charge la commande
exec
qui se comportent de manière semblable ànsenter
. Cette commande peut exécuter de nouveaux processus déjà en cours d'exécution conteneur (conteneur doit avoir le PID 1 processus en cours d'exécution déjà). Vous pouvez exécuter/bin/bash
à explorer etat du conteneur:voir Le panneau de commande de ligne de la documentation
nsenter
mais je suppose que vous auriez besoin d'un shell ainsi, comment feriez-vous autrement exécuter des commandes commels
oucd
pour enquêter sur le conteneur.Option 1
.RUN apk update && apk add bash
(taille: ~4 MO)winpty docker exec -t -i cvat bash
docker exec -t -i mycontainer /bin/sh
MISE À JOUR: EXPLORER LES!
Cette commande devrait vous permettre de explorer l'exécution d'un conteneur docker:
L'équivalent pour cela dans le menu fixe-composer serait:
(web est le nom de service dans ce cas et il a ats par défaut.)
Une fois que vous êtes à l'intérieur de faire:
ou de toute autre commande bash comme:
Cette commande devrait vous permettre de explorer un docker image:
une fois à l'intérieur n':
ou de toute autre commande bash comme:
La
-it
stands interactifs... et l'ats.Cette commande devrait vous permettre de inspecter l'exécution d'un docker du conteneur ou de l'image:
docker inspect name-of-container-or-image
Vous pouvez le faire et de trouver s'il y a des
bash
oush
là. Cherchez point d'entrée ou cmd dans le json retour.voir docker exec documentation
voir docker-composer exec documentation
voir docker inspecter la documentation
docker cp
Peut-être avec un 1 étape entre les deux. Lire et jouer avec ceci un peu et vous l'aurez!docker exec -ti <name> powershell
(source)docker exec -ti <name> cmd
travaillé. Et pour les autres débutants comme moi, assurez-vous d'utiliser le conteneur nom de l'instance dedocker ps
(quelque chose comme 070494393ca5) plutôt que le nom lisible vous l'avez attribuée.Vous pouvez archiver vos container " du système de fichiers en fichier tar:
Cette façon fonctionne même si votre récipient est arrêté et n'a pas de programme shell comme
/bin/bash
. Je veux dire les images comme bonjour-monde de Docker documentation.export
exemple ci-dessus frappé la tache:docker export adoring_kowalevski | tar tf -
f -
à la fin de votre commande, le goudron lit depuis l'entrée standard par défaut. Simplementdocker export adoring_kowalevski | tar t
œuvres.tar f
dépend de la configuration. Une partie est laTAPE
variable d'environnement. D'autres sont contrôlés dans le cadre de la construction. L'effet net est que l'on ne doit jamais supposer qu'il lit stdin ou écrit stdout, mais toujours à l'état explicitement.Le système de fichiers du conteneur est dans le dossier de données de docker, normalement dans /var/lib/menu fixe. Afin de démarrer et d'inspecter l'exécution d'un des conteneurs de fichiers système, procédez comme suit:
Et maintenant le répertoire de travail actuel est la racine du conteneur.
Avant La Création Des Conteneurs :
Si vous d'explorer la structure de l'image qui est monté à l'intérieur du conteneur que vous pouvez faire
Ce serait vous donner la visibilité de tous les calques d'une image et sa configuration qui est présent dans des fichiers json.
Après la création des conteneurs :
Pour cela, il y a déjà beaucoup de réponses ci-dessus. ma façon préférée de faire
ce serait -
Les plus upvoted réponse est de travailler pour moi lorsque le conteneur est en fait commencé, mais quand il n'est pas possible de courir et vous souhaitez copier les fichiers à partir du conteneur cela m'a sauvé avant:
Grâce à docker cp (lien) vous pouvez copier directement dans le récipient, comme il l'a été toute autre partie de votre système de fichiers.
Par exemple, la récupération de tous les fichiers à l'intérieur d'un conteneur:
Notez que vous n'avez pas besoin de spécifier que vous souhaitez copier récursivement.
Sur Ubuntu 14.04 de course Docker 1.3.1, j'ai trouvé le conteneur racine du système de fichiers sur la machine hôte dans le répertoire suivant:
Plein Docker informations de version:
devicemapper
répertoire). Le fichier existe sous/var/lib/docker/overlay/<a sha256 apparently/<upper or merged>/...
. Je ne suis pas sûr de savoir comment portable/il est sûr d'accéder à des fichiers il ydirect-lvm
par exemple.Essayez d'utiliser
Il y a peut être possibilité que bash n'est pas mis en œuvre. pour cela, vous pouvez utiliser
- Je utiliser un autre sale coup qui est aufs/devicemapper agnostique.
Je regarde la commande que le conteneur est en cours d'exécution par exemple
docker ps
et si c'est un apache ou
java
je viens de faire ce qui suit:et voilá que vous êtes à l'intérieur du conteneur.
Fondamentalement, vous pouvez vous en tant que root cd dans
/proc/<PID>/root/
dossier tant que le processus est géré par le conteneur. Méfiez-vous des liens symboliques ne fera pas de sens wile à l'aide de ce mode.Le plus de vote réponse est bonne, sauf si votre conteneur n'est pas un vrai système Linux.
Nombre de conteneurs (en particulier l'aller de la base) n'ont pas de binaire standard (pas de
/bin/bash
ou/bin/sh
). Dans ce cas, vous aurez besoin pour accéder au réel des conteneurs de fichiers directement:Fonctionne comme un charme:
Remarque: Vous devez l'exécuter en tant que root.
Dans mon cas, pas de shell a été pris en charge dans un conteneur à l'exception
sh
. Donc, cela a fonctionné comme un charmevous pouvez utiliser de plongée pour afficher le contenu de l'image de manière interactive avec TUI
https://github.com/wagoodman/dive
Pour moi, celui-ci fonctionne bien (merci pour les derniers commentaires pour préciser le répertoire /var/lib/docker/):
Ici, 2465790aa2c4 est le numéro court de l'exécution de conteneur (comme montré par docker ps), suivie par une étoile.
Pour docker aufs pilote:
Le script va trouver le conteneur racine dir(Test sur docker 1.7.1 et 1.10.3 )
Sur les nouvelles versions de Docker vous pouvez exécuter
docker exec [container_name]
qui exécute un shell à l'intérieur de votre conteneurAfin d'obtenir une liste de tous les fichiers dans un conteneur, il suffit d'exécuter
docker exec [container_name] ls
Cette réponse va aider ceux qui (comme moi) qui veulent explorer le menu fixe le volume de système de fichiers, même si le conteneur n'est pas en cours d'exécution.
Liste de course de conteneurs docker:
docker ps
=> ID de CONTENEUR "4c721f1985bd"
Regarder le docker points de montage de volume sur votre machine physique (https://docs.docker.com/engine/tutorials/dockervolumes/):
docker inspect -f {{.Mounts}} 4c721f1985bd
=> [{ /tmp/conteneur-garren /tmp vrai rprivate}]
Cela me dit que le local de la machine physique répertoire /tmp/conteneur-garren est mappé à l' /tmp menu fixe le volume de destination.
Connaître les locaux de la machine physique répertoire (/tmp/conteneur-garren) signifie que je peux explorer le système de fichiers si oui ou non le conteneur docker est en cours d'exécution. C'était critique pour m'aider à comprendre qu'il y avait des résidus de données qui ne devraient pas avoir persisté même après que le conteneur n'était pas en cours d'exécution.
une autre astuce est d'utiliser le atomique outil de faire quelque chose comme:
Le Docker image sera monté à /chemin/vers/mnt pour vous pour l'inspecter.
Seulement pour LINUX
Le moyen le plus simple que j'utilise a l'aide de proc dir, qui est le récipient doit être en cours d'exécution dans le but d'inspecter le support contenant des fichiers.
Trouver l'id de processus (PID) du récipient et de le stocker dans une variable
Assurez-vous que le conteneur processus est en cours d'exécution, et d'utiliser la variable nameto entrer dans le dossier conteneur
Si vous souhaitez obtenir par le biais de la dir, sans trouver le numéro de PID en utilisant cette commande longue
Conseils:
Après que vous obtenez à l'intérieur du récipient, tout ce que vous faites qui affectent le processus réel de l'conteneur, tel que l'arrêt du service ou de la modification du numéro de port.
Espère que cela aide
Remarque:
Cette méthode ne fonctionne que si le conteneur est toujours en cours, sinon, le répertoire n'existe pas plus si le conteneur a arrêté ou supprimé
Ma manière préférée de comprendre ce qui se passe à l'intérieur du contenant est:
exposer-p 8000
Démarrer le serveur à l'intérieur
Pour une déjà en cours d'exécution conteneur, vous pouvez le faire:
Vous devez être root pour cd-rom dir. Si vous n'êtes pas root, essayez de 'sudo su' avant l'exécution de la commande.
Edit: Suite v1.3, voir Jiri réponse - c'est mieux.
Si vous utilisez le AUFS pilote de stockage, vous pouvez utiliser mon docker-couche script qui permet de trouver n'importe quel conteneur de système de fichiers racine (mnt) et readwrite couche :
Modifier 2018-03-28 :
docker-couche a été remplacé par panneau-sauvegarde
La
docker exec
de commande pour exécuter une commande dans l'exécution d'un conteneur peut aider dans de multiples cas.Par exemple :
1) Accéder en bash pour l'exécution de conteneur de système de fichiers :
2) l'Accès en bash pour l'exécution de conteneur de système de fichiers en tant que root pour pouvoir avoir les droits requis :
Ceci est particulièrement utile pour être en mesure d'effectuer un traitement en tant que root dans un récipient.
3) l'Accès en bash pour l'exécution de conteneur de système de fichiers avec un répertoire de travail :
Cela permettra de lancer un bash session de l'image:
docker run --rm-il --point d'entrée=/bin/bash
Vous pouvez exécuter un bash à l'intérieur du conteneur avec ceci:
$ docker run -it ubuntu /bin/bash
Aucune des réponses étudier le cas d'un conteneur qui est sorti (et ne peut pas être redémarré) et/ou n'ont pas de coquille installé (par exemple, distroless ceux). Celui-ci fonctionne aussi longtemps que vous avez un accès root sur le Panneau d'accueil.
Pour un véritable manuel d'inspection, de trouver de la couche d'Id d'abord:
Dans la sortie, vous devriez voir quelque chose comme
Naviguer dans ce dossier (en tant que root) pour trouver les dernières visible de l'état du conteneur de système de fichiers.