Où sont stockées les images Docker sur la machine hôte?

876

J'ai réussi à trouver les conteneurs sous le répertoire /var/lib/docker/containers, mais je ne trouve pas les images.

Quels sont les répertoires et fichiers sous /var/lib/docker?

nemo
la source
2
Il est préférable d'indiquer les spécificités du système d'exploitation dans le titre de la question et / ou l'énoncé des questions dans de tels cas. Deux bonnes réponses ont été fournies pour linux et macOS (Mac OS X).
Webel IT Australia - votant pour le

Réponses:

637

Le contenu du /var/lib/dockerrépertoire varie en fonction du pilote que Docker utilise pour le stockage .

Par défaut , ce sera aufsmais peut revenir à overlay, overlay2, btrfs, devicemapperou en zfsfonction de votre soutien du noyau. Dans la plupart des endroits, ce sera le cas, aufsmais les chapeaux rouges sont allés de pairdevicemapper .

Vous pouvez définir manuellement le pilote de stockage avec l' option -sou--storage-driver= sur le démon Docker .

  • /var/lib/docker/{driver-name} contiendra le stockage spécifique au pilote pour le contenu des images.
  • /var/lib/docker/graph/<id>contient désormais uniquement des métadonnées sur l'image, dans les fichiers jsonet layersize.

Dans le cas de aufs:

  • /var/lib/docker/aufs/diff/<id> a le contenu du fichier des images.
  • /var/lib/docker/repositories-aufsest un fichier JSON contenant des informations sur l'image locale. Cela peut être consulté avec la commande docker images.

Dans le cas de devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data stocke les images
  • /var/lib/docker/devicemapper/devicemapper/metadata les métadonnées
  • Notez que ces fichiers sont des fichiers "clairsemés" à provisionnement fin et ne sont donc pas aussi gros qu'ils le semblent.
Matt
la source
1
Puis-je voir le contenu à l'intérieur, en le montant d'une manière ou d'une autre?
rv
1
Si vous définissez le pilote de stockage après qu'il est déjà en cours d'exécution et que certains conteneurs en cours d'exécution avec des images, migrera-t-il la date au prochain redémarrage du démon? Sinon alors comment modifier le pilote de stockage dans ce cas?
BTR Naidu
7
Pour MacOS, voir la réponse ci
ProfNandaa
92
Rendez-vous service et ne "vérifiez pas les valeurs par défaut". Utilisez docker infoet trouvez l'emplacement réel spécifique à votre configuration .
Bruno Bronosky
5
Cela semble avoir changé. J'utilise Docker for Macavec 2 images de 1,5 Go chacune et je n'ai /var/libpas de répertoire docker.
miguelmorin
299

Lors de l'utilisation de l'application Docker pour Mac, il apparaît que les conteneurs sont stockés dans la machine virtuelle située à:

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

MISE À JOUR (Gracieuseté de mmorin ):

Au 15 janvier 2019, il semble qu'il n'y ait que ce fichier:

~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw

qui contient le Docker Disk et toutes les images et conteneurs qu'il contient.

mirosval
la source
7
Est-ce l'emplacement pour toutes les images (comme ubuntu, nginx), ou est-ce l'emplacement pour tous les conteneurs? La question d'origine demande des images , pas des conteneurs ...
Siu Ching Pong -Asuka Kenji-
2
Si vous gardez à l'esprit que Docker est toujours en cours d'exécution sur une machine virtuelle, les chemins d'accès au système sont relatifs à la machine virtuelle et non au système Mac Osx. Essayez cette commande: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root nad après ceci: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker Vous pouvez répertorier le dossier docker à partir de l'hôte WM
user1842947
3
Cela semble avoir changé. J'utilise Docker for Macavec deux images de 1,5 Go chacune et je n'ai ~/Library/Containers/Data/com.docker.docker/Datapas de répertoire com.docker.driver.amd64-linuxet le seul gros fichier est vms/0/Docker.rawavec 3,6 Go.
miguelmorin
1
Que qcow2 ou raw soit utilisé dépend de si vous êtes sur MacOS High Sierra avec APFS ou en dessous: docs.docker.com/docker-for-mac/faqs/#disk-usage
Peter
1
Vérifiez la taille pour mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Efren
122

c'était l'ancienne façon de faire, maintenant elle a changé. Ignorez cette réponse à partir de 2019

Dans le cas particulier de Mac OS X ou Windows, à l'aide de boot2docker, vos images Docker sont stockées dans une machine virtuelle VirtualBox gérée par boot2docker.

Cette VM sera stockée à la place normale des images VirtualBox:

      OS X: ~/VirtualBox VMs/boot2docker-vm

      Les fenêtres: %USERPROFILE%/VirtualBox VMs/boot2docker-vm

Vous pouvez le réinitialiser en exécutant (AVERTISSEMENT: cela détruira toutes les images que vous avez construites et téléchargées jusqu'à présent):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

Ceci est particulièrement utile si vous avez conservé des tonnes d'images intermédiaires lors de la construction / débogage d'une construction sans les options --rm utiles, je les cite ici pour référence:

docker build -t webapp --rm=true --force-rm=true .

au lieu de:

docker build -t webapp .
Phil L.
la source
16
Après une nouvelle installation de Docker sur Windows 10, je peux confirmer que le résultat d'un clic sur le raccourci Docker Quickstart Terminal pour la première fois crée une machine virtuelle (VM) appelée `` par défaut '' (après quelques démarrages infructueux - continuez à l'exécuter jusqu'à Ça marche). Cette machine virtuelle par défaut peut être située dans Windows à: %USERPROFILE%\.docker\machine\machines (veuillez noter l'arrêt complet dans le chemin)
AnotherLongUsername
6
Dans les versions plus récentes, boot2docker est désormais docker-machine . Voir docs.docker.com/machine/migrate-to-machine
khylo
3
Est-il possible de changer cet emplacement?
dhblah
13
La réponse n'est plus correcte pour Windows 10. Au lieu de cela, consultez la nouvelle réponse de @tristan qui fait référenceC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers
5
% USERPROFILE% \. Docker est toujours correct pour les configurations win7.
RMorrisey
119

En fait, les images Docker sont stockées dans deux fichiers comme indiqué par la commande suivante

$ docker info

Fichier de données: /var/lib/docker/devicemapper/devicemapper/data

Fichier de métadonnées: /var/lib/docker/devicemapper/devicemapper/metadata

Marc Rechté
la source
3
C'est pour les variantes de RedHat. Ils ont choisi de ne pas utiliser AUFS car ce n'est pas dans le noyau principal .
Matt
8
Oui, malheureusement, ces deux lignes "(méta) fichier de données" n'apparaissent pas dans tous les dockers. Cela dépend du pilote utilisé
Orabîg
La réponse de @DmitryYudin mirosval fonctionne pour le dernier Docker pour Mac .
Franklin Yu
8
Une bonne réponse n'est pas "C'est là que c'est sur ma machine." Une bonne réponse est "Voici comment vous le trouvez sur VOTRE machine." Ceci est une bonne réponse. J'ai rejoint une entreprise avec 11 volumes EBS différents remplis d'images de docker. Cette réponse m'a permis de déterminer quel était le "Root Dir" actuel .
Bruno Bronosky
Sur Mac OS X (au moins sur Yosemite, qui est EOL wrt Docker), docker infoest très utile, mais la sortie Docker Root Dir: /var/lib/dockern'indique pas l'emplacement de stockage d'image (voir la réponse spécifique à Mac ci-dessus).
Webel IT Australia - votant pour le
70

Sur le nouveau Docker pour Windows, qui utilise Hyper-V, les données se trouvent sur le disque dur virtuel Docker:

C: \ Users \ Public \ Documents \ Hyper-V \ Disques durs virtuels \ MobyLinuxVM.vhdx

Vous pouvez également ouvrir le «Gestionnaire Hyper-V» pour accéder à Docker / MobyLinuxVM.

Tristan
la source
13
Docker sur Windows 10 Anniversary Update met les fichiers image C:\ProgramData\docker\windowsfilterpour moi. Plus d'infos: stackoverflow.com/a/39971954/188740
Johnny Oshika
1
'Hyper-V Manager' est la réponse!
Reza
68

Les images sont stockées dans /var/lib/docker/graph/<id>/layer.

Notez que les images ne diffèrent que de l'image parente. L'ID parent est stocké avec les métadonnées de l'image /var/lib/docker/graph/<id>/json.

Lorsque vous docker runune image. AUFS «fusionnera» toutes les couches en un seul système de fichiers utilisable.

creack
la source
11
Cette réponse est désormais obsolète, ils ont fait bouger les choses.
Air
7
@Air Pouvez-vous publier ce qui a bougé?
Elijah Lynn
1
il n'y a plus de dossier graphique
Paddy
49

Sur Ubuntu, vous pouvez "jouer" avec des images en cours d'exécution

sudo baobab /var/lib/docker

En fait, les images sont stockées dans /var/lib/docker/aufs/diff

capture d'écran montrant l'outil d'analyse de disque baobab exécuté sur / var / lib / docker

test30
la source
Bien en effet. Sur Mac, DaisyDisk est similaire (affichage à molette), GrandPerspective est également utile (rectangles).
Webel IT Australia - votant pour le
Il semble que ce soit le seul moyen fiable de le trouver.
Alexandr
48

Pour quelqu'un qui utilise Docker toolbox (qui utilise docker-machine), les réponses concernant boot2docker sur Mac OS X ne sont pas valides. La VM docker-machine est appelée "par défaut" et elle existe dans le /Users/<username>/.docker/machine/machines/default/répertoire.

mbbce
la source
3
Je ne trouve aucun conteneur ou dossier d'images dans ce répertoire.
lvarayut
3
recherchez disk.vmdk dans ce répertoire
lukeaus
1
$ docker images -a donne environ 1 gig d'images, tandis que disk.vmdk dans ~ / .docker est d'environ 20 concerts. Comment venir?
Grav
Où est-il stocké dans Windows?
Shreyas
@Grav: La machine virtuelle alloue 20 concerts pour une utilisation future, mais n'utilise qu'un seul concert pour les images.
primavera133
22

Dans Docker pour Windows ( Windows natif), le stockage de conteneur par défaut est à:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...
Tormod Haugene
la source
J'ai exécuté la docker buildcommande et je ne vois pas de fichier qui, je pense, est le fichier image. Je vois des dossiers et des fichiers texte (par exemple service.txt). Quel type de fichier et avec quelle extension de fichier le docker buildcrée-t-il?
user3731622
22

Si vous utilisez Docker pour MAC (non boot2docker), l'emplacement est/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

Sunil Fernandes
la source
Ouais, quand j'ai fait un: jasper@~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux $ ls -lh | grep Docker -rw-r--r--@ 1 jasper staff 6.3G May 25 19:20 Docker.qcow2j'ai trouvé l'image. Mais ce ne sont pas les conteneurs. Je ne les vois pas vraiment dans ce répertoire de données ..
occasion
1
Mais comme indiqué avant vous ici stackoverflow.com/a/37642236/460885, c'est à l'intérieur de cette image que se trouvent les conteneurs.
puis
7

Comme indiqué ici , si vous êtes sur Mac, il se trouve à l'adresse

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Ricardo Martins
la source
2
Docker.qcow2? Comment suis-je supposé en extraire une image Docker spécifique?
AlxVallejo
7

En développant la réponse de Tristan, dans Windows avec Hyper-V, vous pouvez déplacer l'image avec ces étapes de matthuisman:

Sous Windows 10,

  1. Arrêter le docker, etc.
  2. Tapez "Hyper-V Manager" dans la zone de recherche de la barre des tâches et exécutez-le.
  3. Sélectionnez votre PC dans le volet de gauche (le mien s'appelle DESKTOP-CBP **)
  4. Faites un clic droit sur la bonne machine virtuelle (la mienne s'appelle MobyLinuxVM)
  5. Sélectionnez "Désactiver" (s'il est en cours d'exécution)
  6. Faites un clic droit dessus et sélectionnez "Déplacer"
  7. Suivez les invites
boni
la source
2
Cela déplace uniquement la machine Hyper-V et non les images, les images seraient toujours stockées à l'emplacement du disque dur virtuel.
olive_tree
@olive_tree J'essaie de trouver les images créées par la docker buildcommande. Je suis sur un ordinateur Windows 10. Je regarde dans C: \ Users \ Public \ Documents \ Hyper-V \ Virtual hard disks, mais tout ce que je vois est MobyLinuxVM.vhdx. Où sont stockées les images réelles?
user3731622
5

Si vous gardez à l'esprit que Docker est toujours en cours d'exécution sur une machine virtuelle, les chemins d'accès au système sont relatifs à la machine virtuelle et non au système Mac Osx. Comme il est dit, tout est contenu dans un fichier VM:

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

Essayez d'exécuter Alpine Image avec cette option de volume et la commande ls, vous pouvez répertorier l'hôte VM:

docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root

Après cela, essayez simplement:

docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker

Maintenant, vous pouvez répertorier le dossier Docker à partir de l'hôte VM

user1842947
la source
Merci! C'est la seule réponse qui a fonctionné pour moi sur Windows 10 avec Hyper-v. J'ai pu nettoyer les fichiers corrompus dans le dossier insaisissable / var / lib / docker / overlay2.
Ali Cheaito
4

J'utilise le boot2docker pour Docker sur Mac OSX, donc les images sont stockées dans le /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.

Chu-Siang Lai
la source
4

Je ne peux répondre à cette question que pour les utilisateurs d'Ubuntu:

Le répertoire racine de docker peut être trouvé lorsque vous exécutez la commande docker info

Le répertoire Docker sera indiqué dans cette ligne: " Docker Root Dir: /var/lib/docker"

À propos des images docker, elles sont stockées dans le répertoire docker: /var/lib/docker/aufs/diff/

N'oubliez pas que ces choses ne sont pas les mêmes dans toutes les versions de docker. Actuellement, j'utilise 1.12.3.

Arif A.
la source
4

Utilisez la docker infocommande pour afficher des informations à l'échelle du système et l'emplacement peut varier.

Selon le pilote de stockage utilisé, des informations supplémentaires peuvent être affichées, telles que le nom du pool, le fichier de données, le fichier de métadonnées, l'espace de données utilisé, l'espace de données total, l'espace de métadonnées utilisé et l'espace de métadonnées total.

Le fichier de données est l'endroit où les images sont stockées et le fichier de métadonnées est l'endroit où les métadonnées concernant ces images sont stockées. Lorsqu'il est exécuté pour la première fois, Docker alloue une certaine quantité d'espace de données et d'espace de métadonnées à partir de l'espace disponible sur le volume sur lequel /var/lib/dockerest monté.

Voici l'exemple sur Ubuntu (vérifiez Root Dir ):

$ docker info
...
Server Version: 18.06.1-ce
Storage Driver: aufs
 Root Dir: /var/snap/docker/common/var-lib-docker/aufs
...
Docker Root Dir: /var/snap/docker/common/var-lib-docker
...

Et voici l'exemple sur Travis CI (voir Docker Root Dir ):

$ docker info
Server Version: 17.09.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
...
Docker Root Dir: /var/lib/docker
...

Vous pouvez utiliser un --formatparamètre pour extraire ces informations dans un seul fichier, par exemple

$ docker info --format '{{.DriverStatus}}'
[[Root Dir /var/snap/docker/common/var-lib-docker/aufs] [Backing Filesystem extfs] [Dirs 265] [Dirperm1 Supported true]]

ou:

$ docker info --format '{{json .DriverStatus}}'
[["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]
kenorb
la source
3

Dans Docker pour Windows, les journaux sont ici: %USERPROFILE%\AppData\Local\Docker

omasoud
la source
3

vérifier le dossier docker dans /var/lib

les images sont stockées à l'emplacement ci-dessous:

/var/lib/docker/image/overlay2/imagedb/content
Chandra Pal
la source
4
cela n'a que le dossier sha256
toto
Je pense que vous vouliez dire simplement: /var/lib/docker/image/overlay2/. Notez également que c'est le cas du fait que votre moteur Docker utilise overlay2comme pilote de stockage.
Guy Avraham
3

utiliser le docker inspect container_id
dossier de recherche sous MergedDir

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 
madjardi
la source
3

Pour "Docker Desktop", cliquez sur l'icône de la barre d'état système de docker et cliquez sur "Paramètres". entrez la description de l'image ici

Sous l'onglet Avancé, vous pouvez voir l'emplacement de l'image disque.

entrez la description de l'image ici

Nishān Wickramrathna
la source
2

Environnement: Windows 10 Pro, docker desktop 2.0.3.0 edge

cliquez avec le bouton droit sur l'icône de docker dans la barre d'état système, sélectionnez les paramètres - avancés:

Emplacement de l'image disque (modifiable via le navigateur):

C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx

(c'est là - le répertoire Documents est caché)

theRiley
la source
C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx est-elle l'image créée par la docker buildcommande?
user3731622
2
sudo docker info | grep -e "Root Dir"
Mꜳltus
la source
1

Sur Fedora, Docker utilise LVM pour le stockage s'il est disponible. Sur mon système docker infomontre:

Storage Driver: devicemapper
 Pool Name: vg01-docker--pool
 Pool Blocksize: 524.3 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: xfs
 Data file:
 Metadata file:
 Data Space Used: 9.622 GB
 ...

Dans ce cas, pour augmenter le stockage, vous devrez utiliser des outils de ligne de commande LVM ou des gestionnaires de partition compatibles comme blivet .

eddygeek
la source
1

Dans Windows 2016, docker (DockerMsftProvider) utilise le dossier "windowsfilter" sous la racine du docker

>docker info
...
Storage Driver: windowsfilter
...
Docker Root Dir: C:\ProgramData\docker
...

Il utilise le dossier "tmp" sous la racine docker pour télécharger les fichiers et il supprime les fichiers après avoir extrait les fichiers téléchargés dans le dossier "windowsfilter".

shanmuga raja
la source
0

Sur Debian Unstable / Sid,

docker info pour trouver des informations à l'échelle du système.

les images sont stockées dans /var/lib/docker/image/overlay2/imagedb/content et

les conteneurs sont stockés dans /var/lib/docker/containers

version docker, version 18.06.0-ceAPI1.38

Dhanuka
la source
0

Je n'ai pas pu résoudre la question avec Docker version 18.09 sur macos en utilisant les réponses ci-dessus et j'ai réessayé.

La seule solution réelle pour moi était d'utiliser cette docker-compose.ymlconfiguration:

version: '3.7'
...
  services:
    demo-service:
      volumes:
        - data-volume:/var/tmp/container-volume

volumes:
  data-volume:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /tmp/host-volume

Après le lancement avec docker-compose upj'ai finalement eu /tmp/host-volumedes macos partagées en tant que volume inscriptible à partir du conteneur:

> docker exec -it 1234 /bin/bash
bash-4.4$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
...
osxfs                488347692 464780044  21836472  96% /var/tmp/container-volume

J'espère que cela aide aussi les autres.

axelrose
la source
0

Les images sont stockées à l'intérieur /var/lib/dockerpuis sous le storage driverrépertoire applicable .

Le pilote de stockage utilisé peut être déterminé en exécutant la docker infocommande.

anshul
la source
0

Selon le guide de démarrage de Docker, «votre image intégrée» se trouve «dans le registre d'images Docker local de votre ordinateur».

entrez la description de l'image ici

C'est encore étrange pour moi, car maintenant cela mène à la question. Où se trouve le registre d'images Docker local de ma machine?

Néanmoins, je pense vraiment que cette information mérite d'être partagée comme réponse.

user3731622
la source
Haha TBH Je pense que c'est tout au plus un commentaire. Ce serait un excellent commentaire!
Mong H. Ng
0

Si quelqu'un en a besoin à des fins de script, voici une solution en ligne.

Dans le shell POSIX, avec PCRE activé grep, essayez:

DOCKER_ROOT_DIR="$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"

Dans PowerShell:

$DOCKER_ROOT_DIR="$(docker info 2>&1 | foreach {if($_ -match "Docker Root Dir"){$_.TrimStart("Docker Root Dir: ")}})"

Remarque, sous Windows 10 (à partir de 10.0.18999.1), dans les configurations par défaut, il renvoie:

  • C:\ProgramData\Docker en mode "Conteneurs Windows"
  • /var/lib/docker, en mode "Conteneurs Linux"
corbeau vulcan
la source
Sur CentOS, j'ai dû utiliser DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", mais à la fin c'est un fichier, pas un répertoire
HairOfTheDog
Êtes-vous sûr que ce n'est pas un répertoire? Pour moi, sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"listez le contenu de ce répertoire.
vulcan raven