web-dev-qa-db-fra.com

Comment voir le contenu de l'image de docker

J'ai fait un tirage de menu fixe et je peux répertorier 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. Merci.

88
pylearn

Vous pouvez simplement exécuter un conteneur Shell interactif en utilisant cette image et explorer le contenu de cette image.

Par exemple:

docker run -it image_name sh

Ou, si vous voulez voir comment l'image a été construite, c'est-à-dire les étapes de sa Dockerfile, vous pouvez:

docker image history --no-trunc image_name > image_history

Les étapes seront consignées dans le fichier image_history.

136
Ayman Nedjmeddine

La réponse acceptée ici est problématique, car rien ne garantit qu’une image aura une sorte de Shell interactif. Par exemple, le drone/drone image contient une seule commande /drone, et et a aussi une ENTRYPOINT;

$ docker run -it drone/drone sh
FATA[0000] DRONE_Host is not properly configured        

Et cela va échouer:

$ 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 peu commune; de nombreuses images minimales ne contiennent que 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. Le plus simple est probablement la commande docker export, qui exportera un système de fichiers container en tant qu'archive tar. Alors, démarrez un conteneur (peu importe qu'il échoue ou non):

$ docker run -it drone/drone sh
FATA[0000] DRONE_Host is not properly configured        

Ensuite, utilisez docker export pour exporter le système de fichiers vers tar:

$ docker export $(docker ps -lq) | tar tf -

Le docker ps -lq signifie ici "donnez-moi l'identifiant du dernier conteneur docker". Vous pouvez remplacer cela par un nom de conteneur ou un identifiant explicite.

79
larsks

Vous ne devez pas démarrer un conteneur uniquement pour voir le contenu de l'image. Par exemple, vous voudrez peut-être rechercher du contenu malveillant, pas l'exécuter. Utilisez "create" au lieu de "run";

docker create --name="tmp_$$" image:tag docker export tmp_$$ | tar t docker rm tmp_$$

7
lgekman

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.

 enter image description here

6
Serge Voloshenko

Nous pouvons essayer un plus simple comme suit:

docker image inspect image_id

Cela a fonctionné dans la version Docker:

DockerVersion": "18.05.0-ce"
3
Subham Chowdhury
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 contenant les propriétés du conteneur.
  • .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é à cette couche. Docker stocke les images de conteneur sous forme de couches afin d'optimiser l'espace de stockage en réutilisant des couches sur des images.

https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/

OU 

vous pouvez utiliser dive pour afficher le contenu de l'image de manière interactive avec TUI 

https://github.com/wagoodman/dive

1
Andy Wong

Il existe un outil open source gratuit appelé Anchore que vous pouvez utiliser pour analyser des images de conteneur. Cette commande vous permettra de lister tous les fichiers d'une image de conteneur.

anchore-cli image content myrepo/app: derniers fichiers

https://anchore.com/opensource/

0
user11845290

Avec Docker EE pour Windows (17.06.2-ee-6 sur Hyper-V Server 2016), tout le contenu des conteneurs Windows peut être examiné dans le chemin C:\ProgramData\docker\windowsfilter\ du système d'exploitation hôte. 

Aucun montage spécial nécessaire. 

Le préfixe de dossier peut être trouvé par l'identifiant du conteneur à partir de la sortie docker ps -a

0
Vadzim