¿Dónde se almacenan las imágenes de Docker en la máquina host?

876

Logré encontrar los contenedores en el directorio /var/lib/docker/containers, pero no puedo encontrar las imágenes.

¿En qué se encuentran los directorios y archivos /var/lib/docker?

nemo
fuente
2
Es mejor indicar detalles del sistema operativo en el título de la pregunta y / o en la declaración de preguntas en tales casos. Se proporcionaron dos buenas respuestas para linux y macOS (Mac OS X).
Webel IT Australia - votante

Respuestas:

637

El contenido del /var/lib/dockerdirectorio varía según el controlador que Docker esté utilizando para el almacenamiento .

Por defecto, este será aufs, pero puede caer de nuevo a overlay, overlay2, btrfs, devicemappero zfsdependiendo de su soporte en el núcleo. En la mayoría de los lugares esto será, aufspero los RedHats se fuerondevicemapper .

Puede configurar manualmente el controlador de almacenamiento con la opción -so--storage-driver= para el demonio Docker .

  • /var/lib/docker/{driver-name} contendrá el almacenamiento específico del controlador para el contenido de las imágenes.
  • /var/lib/docker/graph/<id>ahora solo contiene metadatos sobre la imagen, en los archivos jsony layersize.

En el caso de aufs:

  • /var/lib/docker/aufs/diff/<id> tiene el contenido del archivo de las imágenes.
  • /var/lib/docker/repositories-aufses un archivo JSON que contiene información de imagen local. Esto se puede ver con el comando docker images.

En el caso de devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data almacena las imágenes
  • /var/lib/docker/devicemapper/devicemapper/metadata los metadatos
  • Tenga en cuenta que estos archivos son archivos "escasos" aprovisionados delgados, por lo que no son tan grandes como parecen.
Matt
fuente
1
¿Puedo ver el contenido dentro, montándolo de alguna manera?
RV
1
Si configura el controlador de almacenamiento después de que ya se está ejecutando y tiene algunos contenedores en ejecución con imágenes, ¿migrará la fecha en el próximo reinicio del demonio? Si no, ¿cómo modificar el controlador de almacenamiento en este caso?
BTR Naidu
77
Para MacOS, vea la respuesta a continuación
ProfNandaa
92
Hazte un favor y no "verifique los valores predeterminados". Use docker infoy encuentre la ubicación real específica para su configuración .
Bruno Bronosky
55
Esto parece haber cambiado. Estoy usando Docker for Maccon 2 imágenes de 1,5 GB cada una y /var/libno tiene directorio docker.
miguelmorin
298

Cuando se usa la aplicación Docker para Mac, parece que los contenedores se almacenan dentro de la VM ubicada en:

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

ACTUALIZACIÓN (Cortesía de mmorin ):

A partir del 15 de enero de 2019 parece que solo hay este archivo:

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

que contiene el Docker Disk y todas las imágenes y contenedores que contiene.

mirosval
fuente
77
¿Es esta la ubicación de todas las imágenes (como ubuntu, nginx) o esta es la ubicación de todos los contenedores? La pregunta original pide imágenes , no contenedores ...
Siu Ching Pong -Asuka Kenji-
2
Si tiene en cuenta que Docker todavía se está ejecutando en una VM, las rutas del sistema son relativas a la VM y no del sistema Mac Osx. Pruebe este comando: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root nad después de esto: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker Está disponible para listar la carpeta del docker desde el host WM
usuario1842947
3
Esto parece haber cambiado. Estoy usando Docker for Macdos imágenes de 1.5 GB cada una y ~/Library/Containers/Data/com.docker.docker/Datano tiene directorio com.docker.driver.amd64-linuxy el único archivo grande está en vms/0/Docker.raw3.6 GB.
miguelmorin
1
Si se usa qcow2 o raw depende de si está en MacOS High Sierra con APFS o inferior: docs.docker.com/docker-for-mac/faqs/#disk-usage
Peter
1
Compruebe el tamaño para mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Efren
122

Esta era la antigua forma de hacerlo, ahora ha cambiado. Haga caso omiso de esta respuesta a partir de 2019

En el caso especial de Mac OS X o Windows, usando boot2docker, las imágenes de Docker se almacenan en una VM VirtualBox administrada por boot2docker.

Esta VM se almacenará en el lugar normal de las imágenes de VirtualBox:

      OS X: ~/VirtualBox VMs/boot2docker-vm

      Ventanas: %USERPROFILE%/VirtualBox VMs/boot2docker-vm

Puede restablecerlo ejecutando (ADVERTENCIA: esto destruirá todas las imágenes que ha creado y descargado hasta ahora):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

Esto es especialmente útil si guardaste toneladas de imágenes intermedias al compilar / depurar una compilación sin las útiles opciones --rm, las cito aquí como referencia: Uso:

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

en vez de:

docker build -t webapp .
Phil L.
fuente
16
Después de una nueva instalación de Docker en Windows 10, puedo confirmar que el resultado de hacer clic en el acceso directo del Terminal de inicio rápido de Docker por primera vez crea una máquina virtual (VM) llamada 'predeterminada' (después de un par de inicios fallidos, siga ejecutándola hasta funciona). Esta VM 'predeterminada' se puede ubicar dentro de Windows en: %USERPROFILE%\.docker\machine\machines (tenga en cuenta el punto final en la ruta)
AnotherLongUsername
66
En versiones más recientes, boot2docker ahora es docker-machine . Ver docs.docker.com/machine/migrate-to-machine
khylo
3
¿Es posible cambiar esa ubicación?
dhblah
13
La respuesta ya no es correcta para Windows 10. En cambio, vea la respuesta más reciente de @tristan que hace referenciaC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers
55
% USERPROFILE% \. Docker sigue siendo correcto para las configuraciones de win7.
RMorrisey
119

En realidad, las imágenes de Docker se almacenan en dos archivos como se muestra mediante el siguiente comando

$ docker info

Archivo de datos: /var/lib/docker/devicemapper/devicemapper/data

Archivo de metadatos: /var/lib/docker/devicemapper/devicemapper/metadata

Marc Rechté
fuente
3
Esto es para las variantes de RedHat. Ellos decidieron no ir AUFS ya que no está en el núcleo principal .
Matt
8
Sí, lamentablemente, estas dos líneas "Archivo de datos (Meta)" no aparecen en todos los acopladores. Depende del controlador utilizado
Orabîg
La respuesta de @DmitryYudin mirosval funciona para la última versión de Docker para Mac .
Franklin Yu
8
Una respuesta adecuada no es "Aquí es donde está en MI máquina". Una respuesta adecuada es " Así es como lo encuentra en SU ​​máquina". Esta es una respuesta adecuada. Me uní a una empresa con 11 volúmenes diferentes de EBS llenos de imágenes acoplables. Esta respuesta me permitió descubrir cuál era el "Dir. Raíz" actual .
Bruno Bronosky
En Mac OS X (al menos en Yosemite, que es EOL wrt Docker), docker infoes muy útil, pero el resultado Docker Root Dir: /var/lib/dockerno indica la ubicación de almacenamiento de la imagen (consulte la respuesta específica de Mac más arriba).
Webel IT Australia - votante
70

En el recientemente lanzado 'Docker para Windows', que usa Hyper-V, los datos se encuentran en el disco duro virtual de Docker:

C: \ Usuarios \ Público \ Documentos \ Hyper-V \ Discos duros virtuales \ MobyLinuxVM.vhdx

También puede abrir el 'Administrador de Hyper-V' para acceder a Docker / MobyLinuxVM.

Tristan
fuente
13
Docker en Windows 10 Anniversary Update pone archivos de imagen C:\ProgramData\docker\windowsfilterpara mí. Más información: stackoverflow.com/a/39971954/188740
Johnny Oshika
1
¡'Hyper-V Manager' es la respuesta!
Reza
68

Las imágenes se almacenan en /var/lib/docker/graph/<id>/layer.

Tenga en cuenta que las imágenes son solo diferentes de la imagen principal. La ID principal se almacena con los metadatos de la imagen /var/lib/docker/graph/<id>/json.

Cuando eres docker rununa imagen. AUFS 'fusionará' todas las capas en un sistema de archivos utilizable.

crujir
fuente
11
Esta respuesta ahora está desactualizada, han movido las cosas.
Aire
77
@ Air ¿Puedes publicar lo que se ha movido?
Elijah Lynn
1
ya no hay carpeta de gráficos
Paddy
49

En Ubuntu puedes "jugar" con imágenes ejecutándose

sudo baobab /var/lib/docker

En realidad, las imágenes se almacenan dentro de /var/lib/docker/aufs/diff

captura de pantalla que muestra la herramienta analizador de disco baobab ejecutándose en / var / lib / docker

test30
fuente
Ciertamente agradable. En Mac, DaisyDisk es similar (pantalla de rueda), GrandPerspective también es útil (rectángulos).
Webel IT Australia - votante
Parece que es la única forma confiable de encontrarlo.
Alexandr
48

Para alguien que usa Docker toolbox (que usa docker-machine), las respuestas sobre boot2docker en Mac OS X no son válidas. La máquina virtual docker-máquina se llama "predeterminada" y existe en el /Users/<username>/.docker/machine/machines/default/directorio.

mbbce
fuente
3
No puedo encontrar ningún contenedor o carpeta de imágenes dentro de ese directorio.
lvarayut
3
busque disk.vmdk en ese directorio
lukeaus
1
$ docker images -a produce alrededor de 1 concierto de imágenes, mientras que disk.vmdk en ~ / .docker es de alrededor de 20 conciertos. ¿Cómo?
Grav
¿Dónde se almacena en Windows?
Shreyas
@Grav: la máquina virtual asigna 20 gigas para uso futuro, pero solo usa 1 gig para imágenes.
primavera133
22

En Docker para Windows ( Windows nativo), el almacenamiento predeterminado del contenedor está en:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...
Tormod Haugene
fuente
Ejecuté el docker buildcomando y no veo un archivo que creo que es el archivo de imagen. Veo algunas carpetas y algunos archivos de texto (por ejemplo, service.txt). ¿Qué tipo de archivo y con qué extensión de archivo docker buildcrea?
user3731622
22

Si está utilizando Docker para MAC (no boot2docker), entonces la ubicación es/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

Sunil Fernandes
fuente
Sí, cuando hice 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.qcow2encontré la imagen. Pero ese no es el contenedor. No verlos en este directorio de datos realmente ..
HR y
1
Pero como se indicó anteriormente, stackoverflow.com/a/37642236/460885 es dentro de esta imagen donde se encuentran los contenedores.
2017
7

Como se respondió aquí , si está en Mac, se encuentra en

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Ricardo Martins
fuente
2
Docker.qcow2? ¿Cómo se supone que extraiga una imagen de acoplador específica de eso?
AlxVallejo
7

Ampliando la respuesta de Tristan, en Windows con Hyper-V puede mover la imagen con estos pasos desde matthuisman:

En Windows 10

  1. Stop docker, etc.
  2. Escriba "Administrador de Hyper-V" en el cuadro de búsqueda de la barra de tareas y ejecútelo.
  3. Seleccione su PC en el panel izquierdo (el mío se llama DESKTOP-CBP **)
  4. Haga clic derecho en la máquina virtual correcta (la mía se llama MobyLinuxVM)
  5. Seleccione "Apagar" (si se está ejecutando)
  6. Haga clic derecho sobre él nuevamente y seleccione "Mover"
  7. Sigue las indicaciones
boni
fuente
2
Esto solo mueve la máquina Hyper-V, no las imágenes, las imágenes aún se almacenarían donde está la ubicación del VHD.
olive_tree
@olive_tree Estoy tratando de encontrar las imágenes creadas por docker buildcomando. Estoy en una computadora con Windows 10. Miro en C: \ Users \ Public \ Documents \ Hyper-V \ Discos duros virtuales, pero todo lo que veo es MobyLinuxVM.vhdx. ¿Dónde se almacenan las imágenes reales?
user3731622
5

Si tiene en cuenta que Docker todavía se está ejecutando en una VM, las rutas del sistema son relativas a la VM y no del sistema Mac Osx. Como dice todo está contenido en un archivo VM:

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

Intente ejecutar la imagen Alpine con esta opción de volumen y el comando ls, puede enumerar el host VM:

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

Después de esto solo intente:

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

Ahora puede enumerar la carpeta acoplable desde el host de VM

usuario1842947
fuente
¡Gracias! Esta es la única respuesta que funcionó para mí en Windows 10 con Hyper-v. Pude limpiar los archivos corruptos en la elusiva carpeta / var / lib / docker / overlay2.
Ali Cheaito
4

Yo uso el boot2docker para Docker en Mac OSX, por lo que las imágenes se almacenan en el /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.

Chu-Siang Lai
fuente
4

Puedo responder esta pregunta solo para usuarios de Ubuntu:

El directorio raíz de Docker se puede encontrar cuando ejecuta el comando docker info

El directorio Docker se dará en esta línea: " Docker Root Dir: /var/lib/docker"

Sobre las imágenes de la ventana acoplable, se almacenan dentro del directorio de la ventana acoplable: /var/lib/docker/aufs/diff/

Recuerde que estas cosas no son iguales en todas las versiones de Docker. Actualmente, estoy usando 1.12.3.

Arif A.
fuente
4

Use el docker infocomando para mostrar información de todo el sistema y la ubicación puede variar.

Dependiendo del controlador de almacenamiento en uso, se puede mostrar información adicional, como el nombre del grupo, el archivo de datos, el archivo de metadatos, el espacio de datos utilizado, el espacio de datos total, el espacio de metadatos utilizado y el espacio de metadatos total.

El archivo de datos es donde se almacenan las imágenes y el archivo de metadatos es donde se almacenan los metadatos relacionados con esas imágenes. Cuando se ejecuta por primera vez, Docker asigna una cierta cantidad de espacio de datos y espacio de metadatos del espacio disponible en el volumen donde /var/lib/dockerestá montado.

Aquí está el ejemplo en Ubuntu (marque el directorio raíz ):

$ 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
...

Y aquí está el ejemplo en Travis CI (ver Docker Root Dir ):

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

Puede usar el --formatparámetro para extraer esa información en un solo archivo, p. Ej.

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

o:

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

En Docker para Windows, los registros están aquí: %USERPROFILE%\AppData\Local\Docker

omasoud
fuente
3

busque la carpeta acoplable en /var/lib

Las imágenes se almacenan en la siguiente ubicación:

/var/lib/docker/image/overlay2/imagedb/content
Chandra Pal
fuente
44
esto solo tiene la carpeta sha256
toto
Creo que quería decir simplemente: /var/lib/docker/image/overlay2/. También tenga en cuenta que este es el caso debido al hecho de que su motor Docker está utilizando overlay2como controlador de almacenamiento.
Guy Avraham el
3

use la docker inspect container_id
carpeta de búsqueda en MergedDir

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

Para "Docker Desktop", haga clic en el icono de la bandeja del sistema docker y haga clic en "Configuración". ingrese la descripción de la imagen aquí

En la pestaña Avanzado, puede ver la ubicación de la imagen del disco.

ingrese la descripción de la imagen aquí

Nishān Wickramrathna
fuente
2

Entorno: Windows 10 Pro, Docker Desktop 2.0.3.0 edge

haga clic con el botón derecho en el icono de la ventana acoplable en la bandeja del sistema, seleccione configuración - avanzado:

Ubicación de la imagen del disco (editable a través del navegador):

C: \ Usuarios \ Público \ Documentos \ Hyper-V \ Discos duros virtuales \ DockerDesktop.vhdx

(está ahí: el directorio de documentos está oculto)

theRiley
fuente
¿Es C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx la imagen creada por el docker buildcomando?
user3731622
2
sudo docker info | grep -e "Root Dir"
Mꜳltus
fuente
1

En Fedora, Docker usa LVM para almacenamiento si está disponible. En mi sistema docker infomuestra:

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
 ...

En ese caso, para aumentar el almacenamiento, deberá utilizar herramientas de línea de comandos LVM o administradores de particiones compatibles como blivet .

eddygeek
fuente
1

En Windows 2016, docker (DockerMsftProvider) usa la carpeta "windowsfilter" en la raíz de docker

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

Utiliza la carpeta "tmp" debajo de la raíz del docker para descargar los archivos y los elimina después de extraer los archivos descargados a la carpeta "windowsfilter".

shanmuga raja
fuente
0

En Debian Unstable / Sid,

docker info para encontrar información de todo el sistema.

las imágenes se almacenan en /var/lib/docker/image/overlay2/imagedb/contenty

los contenedores se almacenan en /var/lib/docker/containers

versión acoplable 18.06.0-ce, versión API1.38

Dhanuka
fuente
0

No pude resolver la pregunta con Docker versión 18.09 en macos usando las respuestas anteriores e intenté nuevamente.

La única solución real para mí fue usar esta docker-compose.ymlconfiguración:

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

Después de lanzar con docker-compose upfinalmente tuve /tmp/host-volumedesde macos compartido como volumen de escritura desde el contenedor:

> 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

Espero que esto ayude a otros también.

axelrose
fuente
0

Las imágenes se almacenan dentro /var/lib/dockery luego en el storage driverdirectorio correspondiente .

El controlador de almacenamiento, en uso, se puede determinar ejecutando el docker infocomando.

anshul
fuente
0

De acuerdo con la guía de inicio de Docker, "su imagen construida" está "en el registro local de imágenes de Docker de su máquina".

ingrese la descripción de la imagen aquí

Esto todavía es extraño para mí, porque ahora lleva a la pregunta. ¿Dónde está el registro local de imágenes Docker de mi máquina?

Sin embargo, definitivamente creo que vale la pena compartir esta información como respuesta.

usuario3731622
fuente
Jaja TBH Creo que esto es a lo sumo un comentario. Sin embargo, sería un gran comentario!
Mong H. Ng
0

Si alguien lo necesita con fines de secuencias de comandos, aquí hay una solución de una línea.

En el shell POSIX, con PCRE habilitado grep, intente:

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

En PowerShell:

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

Tenga en cuenta que, en Windows 10 (a partir de 10.0.18999.1), en configuraciones predeterminadas, devuelve:

  • C:\ProgramData\Docker en modo "contenedores de Windows"
  • /var/lib/docker, en modo "contenedores de Linux"
cuervo vulcano
fuente
En CentOS tuve que usar DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", pero al final es un archivo, no un directorio
HairOfTheDog
¿Estás seguro de que no es un directorio? Para mí, sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"enumere los contenidos de este directorio.
cuervo vulcano