J'ai fait un docker et je peux lister l'image téléchargée. Je veux voir le contenu de cette image. A fait une recherche sur le net mais pas de réponse directe.
Pas dupe. Voir le conteneur et l'image ne sont pas la même chose. Vous voudrez peut-être afficher le système de fichiers initial ou même valider qu'il n'y a rien de malveillant à l'intérieur de l'image avant qu'elle ne puisse s'exécuter.
Keilaron
4
si vous ne pouviez pas exécuter l'image en tant que conteneur, vous pouvez utiliser un outil tel que lecteur ( github.com/wagoodman/dive ) ou vous pouvez utiliser docker save pour exporter l'image en tant que fichier tar. Ensuite, vous pouvez explorer le goudron ou avec la plongée, vous pouvez dès que possible explorer l'image.
Merci. Le premier est ce que je recherche. Explorez essentiellement les dossiers.
pylearn
9
J'essaie de voir le contenu d'une image créée en utilisant "FROM scratch" et il n'y a pas de shell disponible. Existe-t-il une autre façon de voir le contenu? L'image que j'essaie de voir est portainer / portainer.
Juan Hernandez
2
Est-il possible que quelqu'un voit le contenu de l'image sans créer un conteneur? Ou pouvons-nous supposer qu'il est à l'abri de tout sauf s'ils ont le droit d'en faire apparaître un conteneur?
Shabirmean
3
combiner ce qui est dit avant "pour un conteneur Windows avec point d'entrée": docker run -it --entrypoint cmd <image_name>fonctionnera.
La réponse acceptée ici est problématique, car il n'y a aucune garantie qu'une image aura une sorte de shell interactif. Par exemple, l' image drone / drone contient une seule commande /drone, et elle en a également une ENTRYPOINT, donc cela échouera:
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Et cela échouera:
$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".
Ce n'est pas une configuration rare; de nombreuses images minimales contiennent uniquement les fichiers binaires nécessaires pour prendre en charge le service cible. Heureusement, il existe des mécanismes pour explorer un système de fichiers image qui ne dépendent pas du contenu de l'image. La plus simple est probablement la docker exportcommande, qui exportera un système de fichiers conteneur sous forme d'archive tar. Donc, démarrez un conteneur (peu importe s'il échoue ou non):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Utilisez ensuite docker exportpour exporter le système de fichiers vers tar:
$ docker export $(docker ps -lq) | tar tf -
Le docker ps -lqlà signifie « me donne l'identifiant du conteneur le plus récent docker ». Vous pouvez remplacer cela par un nom ou un identifiant de conteneur explicite.
cette réponse est super utile pour comprendre ce qui pourrait être à l'intérieur d'un conteneur à un moment donné
João Andrade
2
Cette réponse est plus correcte et fonctionne pour moi, car je veux explorer le contenu de l'image avec une architecture étrangère et je ne peux pas "simplement l'exécuter"
Vladimir Perevalov
94
Vous ne devez pas démarrer un conteneur juste pour voir le contenu de l'image. Par exemple, vous souhaiterez peut-être rechercher du contenu malveillant, et non l'exécuter. Utilisez "créer" au lieu de "exécuter";
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
La 2e ligne ci-dessus répertorie simplement le contenu du système de fichiers. Si vous voulez obtenir tous les fichiers sous forme de tar, vous pouvez le remplacer par quelque chose comme docker export tmp_$$ > image-fs.tar.
Pino
Quelle sera la 2ème ligne pour Windows OS? Le docker export tmp_$$ | tar tne fonctionnera pas.
Alexei Marinichenko
@Alexei Marinichenko tarn'est peut-être pas installé sur votre ordinateur. Essayez tar --helpde le vérifier.
Abdurrahman I.
1
Cela fonctionne également s'il n'y a pas d'obus dans le conteneur
Peter Dotchev
3
@AlexeiMarinichenko, vous pouvez utiliser le -oparamètre pour spécifier le fichier dans lequel écrire. Par exemple docker export -o c:\temp\tmp_$$.tar tmp_$$.
GiddyUpHorsey
62
docker save nginx > nginx.tar
tar -xvf nginx.tar
Les fichiers suivants sont présents:
manifest.json - Décrit les couches du système de fichiers et le nom du fichier json qui a les propriétés Container.
.json - Propriétés du conteneur
- Chaque répertoire «layerid» contient un fichier json décrivant la propriété de la couche et le système de fichiers associés à cette couche. Docker stocke les images de conteneur sous forme de couches pour optimiser l'espace de stockage en réutilisant les couches sur les images.
Cela me semble être la réponse la plus utile, car vous n'avez pas besoin de démarrer un conteneur pour obtenir les fichiers.
Alec Thomas
1
Entièrement d'accord @AlecThomas - et pour aller plus loin, pourquoi ai-je dockerseulement besoin de voir le contenu de ce qui est, essentiellement, juste un type de fichier d'archive différent.
Ed Randall
bonne réponse, je préciserais également le tag: docker save --output nginx.tar nginx:latestsinon, selon le doc, il contiendra "tous les calques parents, et tous les tags + versions"
Tarek
Cela devrait être voté car c'est probablement le seul moyen d'explorer les internes si vous n'avez aucun utilitaire Unix à l'intérieur. De plus, cette méthode ne nécessite pas la création d'un conteneur.
Stanislav German-Evtushenko
9
Pour répertorier le contenu détaillé d'une image, vous devez exécuter docker run --rm image/name ls -alRoù --rmsignifie supprimer dès que les sorties forment un conteneur.
Le problème avec cette réponse est que, comme discuté dans la réponse acceptée, il n'y a aucune garantie que votre image contient un shell. Ou ls. Ou vraiment des outils communs.
larsks
4
Nous pouvons en essayer une plus simple comme suit:
Cela ne montre pas la contenu ; il ne montre que les calques, etc., qui ont servi à la construction de l'image.
Roger Lipscombe
0
Avec Docker EE pour Windows (17.06.2-ee-6 sur Hyper-V Server 2016), tout le contenu des conteneurs Windows peut être examiné sur le C:\ProgramData\docker\windowsfilter\chemin du système d'exploitation hôte.
Aucun montage spécial nécessaire.
Le préfixe de dossier peut être trouvé par l'ID de conteneur à partir de la docker ps -asortie.
Il existe un outil open source gratuit appelé Anchore que vous pouvez utiliser pour numériser des images de conteneurs. Cette commande vous permettra de lister tous les fichiers dans une image conteneur
Contenu de l'image anchore-cli myrepo / app: derniers fichiers
Réponses:
Vous pouvez simplement exécuter un conteneur de shell interactif à l'aide de cette image et explorer le contenu de cette image.
Par exemple:
Ou suivre pour les images avec un
entrypoint
Ou, si vous voulez voir comment l'image a été créée, c'est-à-dire les étapes dans son
Dockerfile
, vous pouvez:Les étapes seront enregistrées dans le
image_history
fichier.la source
docker run -it --entrypoint cmd <image_name>
fonctionnera.La réponse acceptée ici est problématique, car il n'y a aucune garantie qu'une image aura une sorte de shell interactif. Par exemple, l' image drone / drone contient une seule commande
/drone
, et elle en a également uneENTRYPOINT
, donc cela échouera:Et cela échouera:
Ce n'est pas une configuration rare; de nombreuses images minimales contiennent uniquement les fichiers binaires nécessaires pour prendre en charge le service cible. Heureusement, il existe des mécanismes pour explorer un système de fichiers image qui ne dépendent pas du contenu de l'image. La plus simple est probablement la
docker export
commande, qui exportera un système de fichiers conteneur sous forme d'archive tar. Donc, démarrez un conteneur (peu importe s'il échoue ou non):Utilisez ensuite
docker export
pour exporter le système de fichiers verstar
:Le
docker ps -lq
là signifie « me donne l'identifiant du conteneur le plus récent docker ». Vous pouvez remplacer cela par un nom ou un identifiant de conteneur explicite.la source
Vous ne devez pas démarrer un conteneur juste pour voir le contenu de l'image. Par exemple, vous souhaiterez peut-être rechercher du contenu malveillant, et non l'exécuter. Utilisez "créer" au lieu de "exécuter";
la source
docker export tmp_$$ > image-fs.tar
.docker export tmp_$$ | tar t
ne fonctionnera pas.tar
n'est peut-être pas installé sur votre ordinateur. Essayeztar --help
de le vérifier.-o
paramètre pour spécifier le fichier dans lequel écrire. Par exempledocker export -o c:\temp\tmp_$$.tar tmp_$$
.Les fichiers suivants sont présents:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
OU
vous pouvez utiliser la plongée pour afficher le contenu de l'image de manière interactive avec TUI
https://github.com/wagoodman/dive
la source
docker
seulement besoin de voir le contenu de ce qui est, essentiellement, juste un type de fichier d'archive différent.docker save --output nginx.tar nginx:latest
sinon, selon le doc, il contiendra "tous les calques parents, et tous les tags + versions"Pour répertorier le contenu détaillé d'une image, vous devez exécuter
docker run --rm image/name ls -alR
où--rm
signifie supprimer dès que les sorties forment un conteneur.la source
ls
disponible et dans laPATH
DÉCOUVREZ L'IMAGE DU QUAI !
Découvrez quel type de coque est là
bash
oush
ou ...Inspectez d'abord l'image:
docker inspect name-of-container-or-image
Recherchez
entrypoint
oucmd
dans le retour json.Alors fais:
docker run --rm -it --entrypoint=/bin/bash name-of-image
une fois à l'intérieur de do:
ls -lsa
ou toute autre commande shell comme:cd ..
Le
-it
signifie interactif ... et tty. les--rm
stands pour enlever le conteneur après l'exécution.la source
ls
. Ou vraiment des outils communs.Nous pouvons en essayer une plus simple comme suit:
Cela a fonctionné dans la version Docker:
la source
Avec Docker EE pour Windows (17.06.2-ee-6 sur Hyper-V Server 2016), tout le contenu des conteneurs Windows peut être examiné sur le
C:\ProgramData\docker\windowsfilter\
chemin du système d'exploitation hôte.Aucun montage spécial nécessaire.
Le préfixe de dossier peut être trouvé par l'ID de conteneur à partir de la
docker ps -a
sortie.la source
Il existe un outil open source gratuit appelé Anchore que vous pouvez utiliser pour numériser des images de conteneurs. Cette commande vous permettra de lister tous les fichiers dans une image conteneur
Contenu de l'image anchore-cli myrepo / app: derniers fichiers
https://anchore.com/opensource/
la source