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
?
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
?
Risposte:
Il contenuto della /var/lib/docker
directory varia in base al driver utilizzato da Docker per l'archiviazione .
Per impostazione predefinita, questo sarà aufs
, ma può ricadere overlay
, overlay2
, btrfs
, devicemapper
oppure zfs
a seconda del supporto del kernel. Nella maggior parte dei posti questo sarà, aufs
ma i RedHats sono andati condevicemapper
.
È possibile impostare manualmente il driver di archiviazione con l' opzione -s
o--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 json
e 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 metadatidocker info
e trovare la posizione effettiva specifica per la propria configurazione .
Docker for Mac
con 2 immagini da 1,5 GB ciascuna e /var/lib
non ha directory docker
.
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.
ubuntu
, nginx
) o è questa la posizione per tutti i contenitori? La domanda originale richiede immagini , non contenitori ...
Docker for Mac
con due immagini di 1,5 GB ciascuna e ~/Library/Containers/Data/com.docker.docker/Data
non ha directory com.docker.driver.amd64-linux
e l'unico file di grandi dimensioni è vms/0/Docker.raw
con 3,6 GB.
du -hd1 ~/Library/Containers/com.docker.docker/Data/
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 .
%USERPROFILE%\.docker\machine\machines
(notare il punto fermo nel percorso)
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
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
docker info
è molto utile, ma l'output Docker Root Dir: /var/lib/docker
non indica la posizione di memorizzazione delle immagini (vedere la risposta specifica per Mac sopra).
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.
C:\ProgramData\docker\windowsfilter
per me. Maggiori informazioni: stackoverflow.com/a/39971954/188740
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 run
un'immagine. AUFS "unirà" tutti i livelli in un unico file system utilizzabile.
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
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.
In Docker per Windows ( Windows nativo) l'archiviazione del contenitore predefinita è:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
docker build
comando 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 build
crea?
Se si utilizza Docker per MAC (non boot2docker
), la posizione è/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/
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.qcow2
ho trovato l'immagine. Ma quello non è i contenitori però. Non li vedi in questa directory di dati davvero ..
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
Espandendo la risposta di Tristan, in Windows con Hyper-V puoi spostare l'immagine con questi passaggi da matthuisman:
In Windows 10,
- Stop docker ecc
- Digitare "Hyper-V Manager" nella casella di ricerca sulla barra delle applicazioni ed eseguirlo.
- Seleziona il tuo PC nel riquadro di sinistra (il mio si chiama DESKTOP-CBP **)
- Fai clic destro sulla macchina virtuale corretta (il mio si chiama MobyLinuxVM)
- Seleziona "Spegni" (se è in esecuzione)
- Fai di nuovo clic destro su di esso e seleziona "Sposta"
- Segui le istruzioni
docker build
comando. 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?
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
Uso boot2docker per Docker su Mac OSX, quindi le immagini vengono archiviate in /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk
.
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.
Utilizzare il docker info
comando 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 --format
parametro 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"]]
cerca la cartella docker in /var/lib
le immagini sono memorizzate nella posizione seguente:
/var/lib/docker/image/overlay2/imagedb/content
/var/lib/docker/image/overlay2/
. Si noti inoltre che ciò è dovuto al fatto che il motore Docker utilizza overlay2
come driver di archiviazione.
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)
docker build
comando?
Su Fedora, Docker utilizza LVM per l'archiviazione, se disponibile. Sul mio sistema docker info
mostra:
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 .
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".
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.yml
configurazione:
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 up
finalmente ho avuto /tmp/host-volume
da 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.
Secondo la Guida introduttiva di Docker "l'immagine creata" è "nel registro immagini Docker locale della macchina".
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.
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"DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')"
, ma alla fine è un file, non una directory
sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"
elenca il contenuto di questa directory.