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.
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.
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:
docker run -it image_name sh
Ou suivre pour les images avec un entrypoint
docker run -it --entrypoint sh image_name
Ou, si vous voulez voir comment l'image a été créée, c'est-à-dire les étapes dans son Dockerfile
, vous pouvez:
docker image history --no-trunc image_name > image_history
Les étapes seront enregistrées dans le image_history
fichier.
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 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):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Utilisez ensuite docker export
pour exporter le système de fichiers vers tar
:
$ docker export $(docker ps -lq) | tar tf -
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.
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_$$
docker export tmp_$$ > image-fs.tar
.
docker export tmp_$$ | tar t
ne fonctionnera pas.
tar
n'est peut-être pas installé sur votre ordinateur. Essayez tar --help
de le vérifier.
-o
paramètre pour spécifier le fichier dans lequel écrire. Par exemple docker export -o c:\temp\tmp_$$.tar tmp_$$
.
docker save nginx > nginx.tar
tar -xvf nginx.tar
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
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.
ls
disponible et dans laPATH
DÉCOUVREZ L'IMAGE DU QUAI !
Découvrez quel type de coque est là bash
ou sh
ou ...
Inspectez d'abord l'image: docker inspect name-of-container-or-image
Recherchez entrypoint
ou cmd
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.
ls
. Ou vraiment des outils communs.
Nous pouvons en essayer une plus simple comme suit:
docker image inspect image_id
Cela a fonctionné dans la version Docker:
DockerVersion": "18.05.0-ce"
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.
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