Dove sono archiviate le immagini Docker sul computer host?


875

Sono riuscito a trovare i contenitori nella directory /var/lib/docker/containers, ma non riesco a trovare le immagini.

Quali sono le directory e i file sotto /var/lib/docker?


2
Meglio specificare le specifiche del sistema operativo nel titolo della domanda e / o nella dichiarazione delle domande in tali casi. Sono state fornite due buone risposte per linux e macOS (Mac OS X).
Webel IT Australia - upvoter

Risposte:


637

Il contenuto della /var/lib/dockerdirectory varia in base al driver utilizzato da Docker per l'archiviazione .

Per impostazione predefinita, questo sarà aufs, ma può ricadere overlay, overlay2, btrfs, devicemapperoppure zfsa seconda del supporto del kernel. Nella maggior parte dei posti questo sarà, aufsma i RedHats sono andati condevicemapper .

È possibile impostare manualmente il driver di archiviazione con l' opzione -so--storage-driver= sul daemon Docker .

  • /var/lib/docker/{driver-name} conterrà l'archiviazione specifica del driver per i contenuti delle immagini.
  • /var/lib/docker/graph/<id>ora contiene solo metadati sull'immagine, nei file jsone layersize.

Nel caso di aufs:

  • /var/lib/docker/aufs/diff/<id> ha il contenuto del file delle immagini.
  • /var/lib/docker/repositories-aufsè un file JSON contenente informazioni sull'immagine locale. Questo può essere visualizzato con il comando docker images.

Nel caso di devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data memorizza le immagini
  • /var/lib/docker/devicemapper/devicemapper/metadata i metadati
  • Nota che questi file sono file "sparsi" con thin provisioning, quindi non sono grandi come sembrano.

1
Posso vedere il contenuto all'interno, montandolo in qualche modo?
rv

1
Se si imposta il driver di archiviazione dopo che è già in esecuzione e ha alcuni contenitori in esecuzione con immagini, migrerà la data al prossimo riavvio del daemon? In caso contrario, come modificare il driver di archiviazione in questo caso?
BTR Naidu,


92
Fatevi un favore e non "controllare i valori predefiniti". Utilizzare docker infoe trovare la posizione effettiva specifica per la propria configurazione .
Bruno Bronosky,

5
Questo sembra essere cambiato. Sto usando Docker for Maccon 2 immagini da 1,5 GB ciascuna e /var/libnon ha directory docker.
miguelmorin,

298

Quando si utilizza l'applicazione Docker per Mac, sembra che i contenitori siano archiviati nella VM situata in:

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

AGGIORNAMENTO (per gentile concessione di mmorin ):

A partire dal 15 gennaio 2019 sembra che ci sia solo questo file:

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

che contiene il Docker Disk e tutte le immagini e i contenitori al suo interno.


7
È questa la posizione per tutte le immagini (come ubuntu, nginx) o è questa la posizione per tutti i contenitori? La domanda originale richiede immagini , non contenitori ...
Siu Ching Pong-Asuka Kenji-

2
Se tieni presente che Docker è ancora in esecuzione in una macchina virtuale, i percorsi di sistema sono relativi alla macchina virtuale e non al sistema Mac Osx. Prova questo comando: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root nad dopo questo: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker È possibile elencare la cartella
docker

3
Questo sembra essere cambiato. Sto usando Docker for Maccon due immagini di 1,5 GB ciascuna e ~/Library/Containers/Data/com.docker.docker/Datanon ha directory com.docker.driver.amd64-linuxe l'unico file di grandi dimensioni è vms/0/Docker.rawcon 3,6 GB.
miguelmorin,

1
L'utilizzo di qcow2 o raw dipende dal fatto che ti trovi in ​​MacOS High Sierra con APFS o inferiore: docs.docker.com/docker-for-mac/faqs/#disk-usage
Peter

1
Controlla le dimensioni per mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Efren,

122

questo era il vecchio modo di fare, ora è cambiato. Ignora questa risposta a partire dal 2019

Nel caso speciale di Mac OS X o Windows, utilizzando boot2docker, le immagini Docker vengono archiviate in una VM VirtualBox gestita da boot2docker.

Questa macchina virtuale verrà archiviata al posto normale delle immagini di VirtualBox:

      OS X: ~/VirtualBox VMs/boot2docker-vm

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

Puoi ripristinarlo eseguendo (ATTENZIONE: questo distruggerà tutte le immagini che hai creato e scaricato finora):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

Questo è particolarmente utile se hai tenuto tonnellate di immagini intermedie durante la creazione / il debug di una build senza le utili opzioni --rm, le cito qui per riferimento: Usa:

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

invece di:

docker build -t webapp .

16
Dopo una nuova installazione di Docker su Windows 10, posso confermare che il risultato del clic sul collegamento Terminale di avvio rapido Docker per la prima volta crea una macchina virtuale (VM) chiamata 'default' (dopo un paio di avvii non riusciti - continua a eseguirlo fino a Funziona). Questa macchina virtuale "predefinita" può trovarsi in Windows all'indirizzo: %USERPROFILE%\.docker\machine\machines (notare il punto fermo nel percorso)
AnotherLongUsername

6
Nelle versioni più recenti boot2docker è ora docker -machine . Vedi docs.docker.com/machine/migrate-to-machine
khylo

3
È possibile cambiare quella posizione?
dhblah,

13
La risposta non è più corretta per Windows 10. Invece, vedi la risposta più recente di @tristan che fa riferimentoC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers,

5
La finestra mobile% USERPROFILE% \. È ancora corretta per le impostazioni di win7.
RMorrisey,

119

In realtà, le immagini Docker sono memorizzate in due file come mostrato dal seguente comando

$ docker info

File di dati: /var/lib/docker/devicemapper/devicemapper/data

File di metadati: /var/lib/docker/devicemapper/devicemapper/metadata


3
Questo è per le varianti RedHat. Hanno scelto di non andare su AUFS perché non è nel kernel mainline .
Matt,

8
Sì, sfortunatamente, queste due righe "File di dati (Meta)" non compaiono in ogni finestra mobile. Dipende
dall'autista

@DmitryYudin La risposta di mirosval funziona per l'ultima Docker per Mac .
Franklin Yu,

8
Una risposta corretta non è "Questo è dove si trova sulla MIA macchina". Una risposta corretta è "Ecco come la trovi sulla TUA macchina". Questa è una risposta adeguata. Sono entrato in una società con 11 diversi volumi EBS pieni di immagini docker. Questa risposta mi ha permesso di capire quale fosse l' attuale "Root Dir".
Bruno Bronosky,

Su Mac OS X (almeno su Yosemite, che è EOL wrt Docker), docker infoè molto utile, ma l'output Docker Root Dir: /var/lib/dockernon indica la posizione di memorizzazione delle immagini (vedere la risposta specifica per Mac sopra).
Webel IT Australia - upvoter

70

Sul "Docker per Windows" appena rilasciato, che utilizza Hyper-V, i dati si trovano nel disco rigido virtuale Docker:

C: \ Users \ Public \ Documents \ Hyper-V \ Hard disk virtuali \ MobyLinuxVM.vhdx

È inoltre possibile aprire "Hyper-V Manager" per accedere a Docker / MobyLinuxVM.


13
Docker su Windows 10 Anniversary Update inserisce i file di immagine C:\ProgramData\docker\windowsfilterper me. Maggiori informazioni: stackoverflow.com/a/39971954/188740
Johnny Oshika,

1
"Hyper-V Manager" è la risposta!
Reza,

68

Le immagini sono memorizzate in /var/lib/docker/graph/<id>/layer.

Si noti che le immagini sono solo diverse dall'immagine principale. L'ID principale viene archiviato con i metadati dell'immagine /var/lib/docker/graph/<id>/json.

Quando sei docker runun'immagine. AUFS "unirà" tutti i livelli in un unico file system utilizzabile.


11
Questa risposta non è più aggiornata, hanno spostato le cose.
Air

7
@Air Puoi pubblicare ciò che si è spostato?
Elijah Lynn

1
non esiste più una cartella per i grafici
Paddy,

49

Su Ubuntu puoi "giocare" con le immagini in esecuzione

sudo baobab /var/lib/docker

In realtà, le immagini sono archiviate all'interno /var/lib/docker/aufs/diff

screenshot che mostra il baobab dello strumento analizzatore disco in esecuzione su / var / lib / docker


Davvero bello. Su Mac DaisyDisk è simile (display a rotella), utile anche GrandPerspective (rettangoli).
Webel IT Australia - upvoter

Sembra che sia l'unico modo affidabile per trovarlo.
Alexandr,

48

Per chi sta usando la casella degli strumenti Docker (che utilizza la finestra mobile), le risposte relative a boot2docker su Mac OS X non sono valide. La VM docker-machine è denominata "predefinita" ed esiste nella /Users/<username>/.docker/machine/machines/default/directory.


3
Non riesco a trovare alcun contenitore o cartella di immagini all'interno di quella directory.
lvarayut,

3
cerca disk.vmdk in quella directory
lukeaus

1
$ docker images -a produce circa 1 concerto di immagini, mentre disk.vmdk in ~ / .docker è di circa 20 concerti. Come mai?
Grav

Dove è archiviato in Windows?
Shreyas,

@Grav: la macchina virtuale alloca 20 concerti per uso futuro, ma usa solo 1 concerto per le immagini.
primavera133,

22

In Docker per Windows ( Windows nativo) l'archiviazione del contenitore predefinita è:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...

Ho eseguito il docker buildcomando e non vedo un file che penso sia il file di immagine. Vedo alcune cartelle e alcuni file di testo (ad esempio service.txt). Che tipo di file e con quale estensione docker buildcrea?
user3731622

22

Se si utilizza Docker per MAC (non boot2docker), la posizione è/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/


Sì, quando ho fatto 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.qcow2ho trovato l'immagine. Ma quello non è i contenitori però. Non li vedi in questa directory di dati davvero ..
17-17

1
Ma come affermato prima qui stackoverflow.com/a/37642236/460885 è all'interno di questa immagine che si trovano i contenitori.
rhand

7

Come indicato qui , se sei su Mac, si trova all'indirizzo

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

2
Docker.qcow2? Come posso supporre di estrarre un'immagine docker specifica da quella?
AlxVallejo,

7

Espandendo la risposta di Tristan, in Windows con Hyper-V puoi spostare l'immagine con questi passaggi da matthuisman:

In Windows 10,

  1. Stop docker ecc
  2. Digitare "Hyper-V Manager" nella casella di ricerca sulla barra delle applicazioni ed eseguirlo.
  3. Seleziona il tuo PC nel riquadro di sinistra (il mio si chiama DESKTOP-CBP **)
  4. Fai clic destro sulla macchina virtuale corretta (il mio si chiama MobyLinuxVM)
  5. Seleziona "Spegni" (se è in esecuzione)
  6. Fai di nuovo clic destro su di esso e seleziona "Sposta"
  7. Segui le istruzioni

2
Questo sposta solo la macchina Hyper-V non le immagini, le immagini verrebbero comunque memorizzate dove si trova la posizione VHD.
olive_tree

@olive_tree Sto cercando di trovare le immagini create dal docker buildcomando. Sono su un computer Windows 10. Guardo C: \ Users \ Public \ Documents \ Hyper-V \ dischi rigidi virtuali, ma tutto ciò che vedo è MobyLinuxVM.vhdx. Dove sono archiviate le immagini reali?
user3731622

5

Se tieni presente che Docker è ancora in esecuzione in una macchina virtuale, i percorsi di sistema sono relativi alla macchina virtuale e non al sistema Mac Osx. Come dice tutto è contenuto in un file VM:

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

Prova a eseguire l'immagine alpina con questa opzione di volume e con il comando ls puoi elencare l'host di macchine virtuali:

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

Dopo questo basta provare:

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

Ora puoi elencare la cartella docker dall'host di macchine virtuali


Grazie! Questa è l'unica risposta che ha funzionato per me su Windows 10 con Hyper-v. Sono stato in grado di ripulire i file danneggiati nella cartella elusive / var / lib / docker / overlay2.
Ali Cheaito,

4

Uso boot2docker per Docker su Mac OSX, quindi le immagini vengono archiviate in /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.


4

Posso rispondere a questa domanda solo per gli utenti Ubuntu:

La directory principale della finestra mobile si trova quando si esegue il comando docker info

La directory Docker verrà fornita in questa riga: " Docker Root Dir: /var/lib/docker"

Informazioni sulle immagini della finestra mobile, sono memorizzate nella directory della finestra mobile: /var/lib/docker/aufs/diff/

Ricorda che queste cose non sono le stesse in tutte le versioni della finestra mobile. Attualmente sto usando 1.12.3.


4

Utilizzare il docker infocomando per visualizzare informazioni a livello di sistema e la posizione può variare.

A seconda del driver di archiviazione in uso, è possibile visualizzare ulteriori informazioni, quali nome del pool, file di dati, file di metadati, spazio dati utilizzato, spazio dati totale, spazio metadati utilizzato e spazio metadati totale.

Il file di dati è dove sono archiviate le immagini e il file di metadati è dove sono archiviati i metadati riguardanti quelle immagini. Quando eseguito per la prima volta, Docker alloca una certa quantità di spazio dati e spazio metadati dallo spazio disponibile sul volume in cui /var/lib/dockerè montato.

Ecco l'esempio su Ubuntu (controlla la directory principale ):

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

Ed ecco l'esempio su Travis CI (vedi Docker Root Dir ):

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

È possibile utilizzare il --formatparametro per estrarre tali informazioni in un singolo file, ad es

$ 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"]]

3

In Docker per Windows, i registri sono qui: %USERPROFILE%\AppData\Local\Docker


3

cerca la cartella docker in /var/lib

le immagini sono memorizzate nella posizione seguente:

/var/lib/docker/image/overlay2/imagedb/content

4
questo ha solo sha256 cartella
Toto'

Credo che si intende semplicemente: /var/lib/docker/image/overlay2/. Si noti inoltre che ciò è dovuto al fatto che il motore Docker utilizza overlay2come driver di archiviazione.
Guy Avraham,

3

utilizzare la docker inspect container_id
cartella di ricerca in MergedDir

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

3

Per "Docker Desktop", fai clic sull'icona della barra delle applicazioni di Docker e fai clic su "Impostazioni". inserisci qui la descrizione dell'immagine

Nella scheda Avanzate, è possibile visualizzare la posizione dell'immagine del disco.

inserisci qui la descrizione dell'immagine


2

Ambiente: Windows 10 Pro, desktop docker 2.0.3.0 edge

fare clic con il pulsante destro del mouse sull'icona della finestra mobile nella barra delle applicazioni, selezionare le impostazioni - Avanzate:

Posizione dell'immagine del disco (modificabile tramite il browser):

C: \ Users \ Public \ Documents \ Hyper-V \ dischi rigidi virtuali \ DockerDesktop.vhdx

(è lì - La directory dei documenti è nascosta)


C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx è l'immagine creata dal docker buildcomando?
user3731622


1

Su Fedora, Docker utilizza LVM per l'archiviazione, se disponibile. Sul mio sistema docker infomostra:

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

In tal caso, per aumentare l'archiviazione, dovrai utilizzare gli strumenti da riga di comando LVM o i gestori di partizioni compatibili come Blivet .


1

In Windows 2016, la finestra mobile (DockerMsftProvider) utilizza la cartella "windowsfilter" nella finestra mobile radice

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

Utilizza la cartella "tmp" sotto la finestra mobile docker per scaricare i file ed elimina i file dopo aver estratto i file scaricati nella cartella "windowsfilter".


0

Su Debian Unstable / Sid,

docker info per trovare informazioni a livello di sistema.

le immagini sono memorizzate su /var/lib/docker/image/overlay2/imagedb/contente

i contenitori sono immagazzinati in /var/lib/docker/containers

versione docker 18.06.0-ce, versione API1.38


0

Non sono riuscito a risolvere la domanda con Docker versione 18.09 su macos utilizzando le risposte precedenti e riprovato.

L'unica vera soluzione per me era usare questa docker-compose.ymlconfigurazione:

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

Dopo il lancio con docker-compose upfinalmente ho avuto /tmp/host-volumeda macos condiviso come volume scrivibile all'interno del contenitore:

> 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

Spero che questo aiuti anche gli altri.


0

Le immagini vengono archiviate all'interno /var/lib/dockere quindi nella storage driverdirectory applicabile .

Il driver di archiviazione, in uso, può essere determinato eseguendo il docker infocomando.


0

Secondo la Guida introduttiva di Docker "l'immagine creata" è "nel registro immagini Docker locale della macchina".

inserisci qui la descrizione dell'immagine

Questo è ancora strano per me, perché ora porta alla domanda. Dov'è il registro immagini Docker locale della mia macchina?

Tuttavia, penso che valga la pena condividere queste informazioni come risposta.


Haha TBH Penso che questo sia al massimo un commento. Sarebbe un grande commento però!
Mong H. Ng,

0

Se qualcuno ne ha bisogno per scopi di script, ecco una soluzione a una riga.

Nella shell POSIX, con PCRE abilitato grep, provare:

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

In PowerShell:

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

Nota, quando su Windows 10 (a partire da 10.0.18999.1), nelle configurazioni predefinite, restituisce:

  • C:\ProgramData\Docker in modalità "Contenitori Windows"
  • /var/lib/docker, in modalità "Contenitori Linux"

Su CentOS ho dovuto usare DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", ma alla fine è un file, non una directory
HairOfTheDog

Sei sicuro che non sia una directory? Per me, sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"elenca il contenuto di questa directory.
corvo vulcaniano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.