Onde as imagens do Docker são armazenadas na máquina host?

875

Consegui encontrar os contêineres no diretório /var/lib/docker/containers, mas não consigo encontrar as imagens.

Quais são os diretórios e arquivos /var/lib/docker?

nemo
fonte
2
É melhor indicar as especificações do sistema operacional no título da pergunta e / ou na declaração de perguntas nesses casos. Duas boas respostas foram fornecidas para linux e macOS (Mac OS X).
Webel IT Australia - upvoter

Respostas:

637

O conteúdo do /var/lib/dockerdiretório varia de acordo com o driver que o Docker está usando para armazenamento .

Por padrão este será aufs, mas pode cair de volta para overlay, overlay2, btrfs, devicemapperou zfsdependendo do seu suporte do kernel. Na maioria dos lugares, esse será aufso RedHatsdevicemapper .

Você pode definir manualmente o driver de armazenamento com a opção -sou--storage-driver= para o daemon do Docker .

  • /var/lib/docker/{driver-name} conterá o armazenamento específico do driver para o conteúdo das imagens.
  • /var/lib/docker/graph/<id>agora contém apenas metadados sobre a imagem nos arquivos jsone layersize.

No caso de aufs:

  • /var/lib/docker/aufs/diff/<id> tem o conteúdo do arquivo das imagens.
  • /var/lib/docker/repositories-aufsé um arquivo JSON que contém informações de imagem local. Isto pode ser visto com o comando docker images.

No caso de devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data armazena as imagens
  • /var/lib/docker/devicemapper/devicemapper/metadata os metadados
  • Observe que esses arquivos são arquivos "esparsos" com provisionamento thin e, portanto, não são tão grandes quanto parecem.
Matt
fonte
1
Posso ver o conteúdo interno, montando-o de alguma forma?
rv
1
Se você definir o driver de armazenamento depois que ele já estiver em execução e tiver alguns contêineres em execução com imagens, ele migrará a data na próxima reinicialização do daemon? Caso contrário, como modificar o driver de armazenamento neste caso?
BTR Naidu 12/04
7
Para MacOS, veja a resposta abaixo
ProfNandaa
92
Faça um favor a si mesmo e não "verifique os padrões". Use docker infoe encontre o local real específico para sua configuração .
Bruno Bronosky
5
Isso parece ter mudado. Estou usando Docker for Maccom 2 imagens de 1,5 GB cada e /var/libnão possui diretório docker.
Miguelmorin
298

Ao usar o Docker for Mac Application, parece que os contêineres estão armazenados na VM localizada em:

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

ATUALIZAÇÃO (Cortesia de mmorin ):

A partir de 15 de janeiro de 2019, parece que existe apenas este arquivo:

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

que contém o Docker Disk e todas as imagens e contêineres dentro dele.

mirosval
fonte
7
É este o local para todas as imagens (como ubuntu, nginx), ou este é o local para todos os recipientes? A pergunta original pede imagens , não recipientes ...
Siu Ching Pong -Asuka Kenji-
2
Se você lembrar que o Docker ainda está sendo executado em uma VM, os caminhos do sistema são relativos à VM e não ao sistema Mac Osx. Tente este comando: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root nad depois disso: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker Você está disponível para listar a pasta docker do host WM
user1842947 22/18
3
Isso parece ter mudado. Estou usando Docker for Macduas imagens de 1,5 GB cada e ~/Library/Containers/Data/com.docker.docker/Datanão possui diretório com.docker.driver.amd64-linuxe o único arquivo grande está vms/0/Docker.rawcom 3,6 GB.
miguelmorin
1
Se qcow2 ou cru é usado depende se você está em MacOS High Sierra com APFS ou abaixo: docs.docker.com/docker-for-mac/faqs/#disk-usage
Peter
1
Verifique o tamanho do mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Efren
122

essa era a maneira antiga de fazer, agora mudou. Ignore esta resposta a partir de 2019

No caso especial do Mac OS X ou Windows, usando o boot2docker, suas imagens do Docker são armazenadas em uma VM do VirtualBox gerenciada pelo boot2docker.

Esta VM será armazenada no local normal das imagens do VirtualBox:

      OS X: ~/VirtualBox VMs/boot2docker-vm

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

Você pode redefini-lo executando (AVISO: Isso destruirá todas as imagens que você criou e baixou até o momento):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

Isso é especialmente útil se você mantiver toneladas de imagens intermediárias ao criar / depurar uma compilação sem as opções úteis --rm, cito-as aqui para referência:

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

ao invés de:

docker build -t webapp .
Phil L.
fonte
16
Após uma nova instalação do Docker no Windows 10, posso confirmar que o resultado de clicar pela primeira vez no atalho do Docker Quickstart Terminal cria uma máquina virtual (VM) chamada 'padrão' (após algumas tentativas malsucedidas - continue executando até funciona). Essa VM 'padrão' pode ser localizada no Windows em: %USERPROFILE%\.docker\machine\machines (observe o ponto final no caminho)
AnotherLongUsername
6
Nas versões mais recentes, o boot2docker agora é docker-machine . Veja docs.docker.com/machine/migrate-to-machine
khylo
3
É possível alterar esse local?
dhblah
13
A resposta não é mais correto para o Windows 10. Em vez disso, ver a resposta mais recente a partir @tristan que faz referênciaC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers
5
A docker% USERPROFILE% \. Ainda está correta para as configurações do win7.
precisa saber é o seguinte
119

Na verdade, as imagens do Docker são armazenadas em dois arquivos, como mostra o seguinte comando

$ docker info

Arquivo de dados: /var/lib/docker/devicemapper/devicemapper/data

Arquivo de metadados: /var/lib/docker/devicemapper/devicemapper/metadata

Marc Rechté
fonte
8
Sim, infelizmente, essas duas linhas "(arquivo de dados Meta)" não aparecem em todas as janelas de encaixe. Ele depende do driver usado
Orabîg
A resposta de @DmitryYudin mirosval funciona para o Docker mais recente para Mac .
Franklin Yu
8
Uma resposta adequada não é "É aqui que está minha máquina". Uma resposta adequada é "Aqui está como você o encontra na SUA máquina". Esta é uma resposta adequada. Entrei para uma empresa com 11 volumes EBS diferentes, cheios de imagens do docker. Essa resposta me permitiu descobrir qual era o atual "Root Dir".
Bruno Bronosky
No Mac OS X (pelo menos no Yosemite, que é o Docker da EOL), docker infoé muito útil, mas a saída Docker Root Dir: /var/lib/dockernão indica o local de armazenamento da imagem (consulte a resposta específica do Mac acima).
Webel IT Australia - upvoter
70

No recém-lançado 'Docker for Windows', que usa o Hyper-V, os dados estão localizados no disco rígido virtual do Docker:

C: \ Usuários \ Público \ Documentos \ Hyper-V \ Discos rígidos virtuais \ MobyLinuxVM.vhdx

Você também pode abrir o 'Gerenciador Hyper-V' para acessar o Docker / MobyLinuxVM.

Tristan
fonte
13
O Docker no Windows 10 Anniversary Update coloca arquivos de imagem C:\ProgramData\docker\windowsfilterpara mim. Mais informações: stackoverflow.com/a/39971954/188740
Johnny Oshika #
1
'Gerenciador Hyper-V' é a resposta!
Reza
68

As imagens são armazenadas em /var/lib/docker/graph/<id>/layer.

Observe que as imagens são apenas diferentes da imagem pai. O ID pai é armazenado com os metadados da imagem /var/lib/docker/graph/<id>/json.

Quando você docker runuma imagem. O AUFS 'mesclará' todas as camadas em um sistema de arquivos utilizável.

creack
fonte
11
Esta resposta está desatualizada, eles mudaram as coisas.
Air
7
@ Air Você pode postar o que mudou?
Elias Lynn
1
não existe mais pasta de gráfico #
Paddy
49

No Ubuntu você pode "jogar" com imagens em execução

sudo baobab /var/lib/docker

Na verdade, as imagens são armazenadas dentro /var/lib/docker/aufs/diff

captura de tela mostrando o baobab da ferramenta analisador de disco em execução em / var / lib / docker

test30
fonte
Bom mesmo. No Mac, o DaisyDisk é semelhante (exibição na roda), o GrandPerspective também é útil (retângulos).
Webel IT Australia - upvoter 21/02
Parece que é a única maneira confiável de encontrá-lo.
Alexandr
48

Para alguém que esteja usando a caixa de ferramentas do Docker (que usa a docker-machine), as respostas relativas ao boot2docker no Mac OS X não são válidas. A VM da máquina de encaixe é chamada "padrão" e existe no /Users/<username>/.docker/machine/machines/default/diretório

mbbce
fonte
3
Não consigo encontrar nenhum contêiner ou pasta de imagens dentro desse diretório.
Lvarayut
3
procure disk.vmdk nesse diretório
lukeaus
1
$ docker images -a produz cerca de 1 gig de imagens, enquanto disk.vmdk no ~ / .docker tem cerca de 20 gigs. Por quê?
Grav
Onde está armazenado no Windows?
Shreyas
@ Grav: A máquina virtual aloca 20 GB para uso futuro, mas usa apenas 1 GB para imagens.
precisa
22

No Docker para Windows ( Windows nativo), o armazenamento padrão do contêiner é:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...
Tormod Haugene
fonte
Executei o docker buildcomando e não vejo um arquivo que acho que seja o arquivo de imagem. Eu vejo algumas pastas e alguns arquivos de texto (por exemplo, service.txt). Que tipo de arquivo e com qual extensão ele docker buildcria?
user3731622
22

Se você estiver usando o Docker para MAC (não boot2docker), o local será/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

Sunil Fernandes
fonte
Sim, quando fiz: 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.qcow2Encontrei a imagem. Mas esses não são os contêineres. Não vê-los neste diretório de dados realmente ..
rhand
1
Mas, como afirmado antes, aqui stackoverflow.com/a/37642236/460885 , é dentro desta imagem que os contêineres estão localizados.
rhand 25/05
7

Conforme respondido aqui , se você estiver no Mac, ele estará localizado em

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Ricardo Martins
fonte
2
Docker.qcow2? Como devo extrair uma imagem específica do Docker?
AlxVallejo
7

Expandindo a resposta de Tristan, no Windows com Hyper-V você pode mover a imagem com estas etapas em matthuisman:

No Windows 10,

  1. Stop docker etc
  2. Digite "Gerenciador Hyper-V" na caixa de pesquisa da barra de tarefas e execute-o.
  3. Selecione seu PC no painel esquerdo (o Mine é chamado DESKTOP-CBP **)
  4. Clique com o botão direito do mouse na máquina virtual correta (a Mine é chamada MobyLinuxVM)
  5. Selecione "Desligar" (se estiver em execução)
  6. Clique com o botão direito do mouse novamente e selecione "Mover"
  7. Siga as instruções
boni
fonte
2
Isso move apenas a máquina Hyper-V e não as imagens; elas ainda serão armazenadas onde está o local do VHD.
111317 olive_tree
@olive_tree Estou tentando encontrar as imagens criadas por docker buildcomando. Estou em um computador com Windows 10. Olho em discos rígidos C: \ Usuários \ Público \ Documentos \ Hyper-V \ Virtual, mas tudo o que vejo é MobyLinuxVM.vhdx. Onde as imagens reais são armazenadas?
user3731622
5

Se você lembrar que o Docker ainda está sendo executado em uma VM, os caminhos do sistema são relativos à VM e não ao sistema Mac Osx. Como diz tudo, está contido em um arquivo VM:

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

Tente executar a imagem Alpine com esta opção de volume e o comando ls que você pode listar o host da VM:

docker run --rm -it -v /: / vm-root alpino: borda ls -l / vm-raiz

Depois disso, tente:

docker run --rm -it -v /: / vm-root alpino: borda ls -l / vm-raiz / var / lib / docker

Agora, você pode listar a pasta docker do host da VM

user1842947
fonte
Obrigado! Esta é a única resposta que funcionou para mim no Windows 10 com Hyper-v. Consegui limpar os arquivos corrompidos na pasta indescritível / var / lib / docker / overlay2.
Ali Cheaito
4

Eu uso o boot2docker for Docker no Mac OSX, para que as imagens sejam armazenadas no /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.

Chu-Siang Lai
fonte
4

Só posso responder a esta pergunta para usuários do Ubuntu:

O diretório raiz do docker pode ser encontrado quando você executa o comando docker info

O diretório do Docker será fornecido nesta linha: " Docker Root Dir: /var/lib/docker"

Sobre as imagens da janela de encaixe, elas são armazenadas dentro do diretório da janela de encaixe: /var/lib/docker/aufs/diff/

Lembre-se de que essas coisas não são as mesmas em todas as versões do docker. Atualmente, estou usando a 1.12.3.

Arif A.
fonte
4

Use o docker infocomando para exibir informações em todo o sistema e o local pode variar.

Dependendo do driver de armazenamento em uso, informações adicionais podem ser mostradas, como nome do pool, arquivo de dados, arquivo de metadados, espaço de dados usado, espaço de dados total, espaço de metadados usado e espaço total de metadados.

O arquivo de dados é onde as imagens são armazenadas e o arquivo de metadados é onde os metadados relativos a essas imagens são armazenados. Quando executado pela primeira vez, o Docker aloca uma certa quantidade de espaço para dados e espaço para metadados a partir do espaço disponível no volume em que /var/lib/dockerestá montado.

Aqui está o exemplo no Ubuntu (consulte 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
...

E aqui está o exemplo no Travis CI (consulte Diretório raiz do Docker ):

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

Você pode usar o --formatparâmetro para extrair essas informações em um único arquivo, por exemplo

$ 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
fonte
3

No Docker para Windows, os logs estão aqui: %USERPROFILE%\AppData\Local\Docker

omasoud
fonte
3

verifique a pasta docker em /var/lib

as imagens são armazenadas no local abaixo:

/var/lib/docker/image/overlay2/imagedb/content
Chandra Pal
fonte
4
este tem apenas sha256 pasta
toto'
Eu acho que você quis simplesmente: /var/lib/docker/image/overlay2/. Observe também que esse é o caso devido ao fato de o mecanismo do Docker estar sendo usado overlay2como driver de armazenamento.
Guy Avraham
3

use a docker inspect container_id
pasta find em MergedDir

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

Para o "Docker Desktop", clique no ícone da bandeja do sistema do docker e clique em "Configurações". insira a descrição da imagem aqui

Na guia Avançado, você pode ver o local da imagem do disco.

insira a descrição da imagem aqui

Nishān Wickramrathna
fonte
2

Ambiente: Windows 10 Pro, borda do docker desktop 2.0.3.0

clique com o botão direito do mouse no ícone da janela de encaixe na bandeja do sistema, selecione configurações - avançado:

Localização da imagem do disco (editável pelo navegador):

C: \ Usuários \ Público \ Documentos \ Hyper-V \ Discos Virtuais \ DockerDesktop.vhdx

(está lá - o diretório Documents está oculto)

theRiley
fonte
C: \ Usuários \ Público \ Documentos \ Hyper-V \ Discos Rígidos Virtuais \ DockerDesktop.vhdx é a imagem criada pelo docker buildcomando?
user3731622
2
sudo docker info | grep -e "Root Dir"
Mꜳltus
fonte
1

No Fedora, o Docker usa o LVM para armazenamento, se disponível. No meu 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
 ...

Nesse caso, para aumentar o armazenamento, você precisará usar ferramentas de linha de comando do LVM ou gerenciadores de partição compatíveis, como o blivet .

eddygeek
fonte
1

No Windows 2016, a janela de encaixe (DockerMsftProvider) usa a pasta "windowsfilter" na raiz da janela de encaixe

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

Ele usa a pasta "tmp" na raiz do docker para baixar os arquivos e exclui os arquivos após extrair os arquivos baixados na pasta "windowsfilter".

shanmuga raja
fonte
0

No Debian Instável / Sid,

docker info para encontrar informações em todo o sistema.

imagens são armazenadas em /var/lib/docker/image/overlay2/imagedb/contente

recipientes são armazenados em /var/lib/docker/containers

versão do docker 18.06.0-ce, versão da API1.38

Dhanuka
fonte
0

Não consegui resolver a questão com o Docker versão 18.09 no macos usando as respostas acima e tentei novamente.

A única solução real para mim foi usar esta docker-compose.ymlconfiguração:

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

Após o lançamento com docker-compose up, finalmente tive /tmp/host-volumedos macos compartilhados como volume gravável de dentro do contêiner:

> 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 isso ajude os outros também.

axelrose
fonte
0

As imagens são armazenadas dentro /var/lib/dockere depois no storage driverdiretório aplicável .

O driver de armazenamento, sendo usado, pode ser determinado executando o docker infocomando.

anshul
fonte
0

De acordo com o Guia de introdução do Docker, "sua imagem criada" está "no registro de imagens do Docker local da sua máquina".

insira a descrição da imagem aqui

Isso ainda é estranho para mim, porque agora isso leva à questão. Onde está o registro de imagens Docker local da minha máquina?

No entanto, eu definitivamente acho que vale a pena compartilhar essas informações como resposta.

user3731622
fonte
Haha TBH Eu acho que isso é no máximo um comentário. Seria um ótimo comentário!
Mong H. Ng
0

Se alguém precisar para fins de script, aqui está uma solução de uma linha.

No shell POSIX, com o PCRE ativado grep, tente:

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

No PowerShell:

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

Observe que, no Windows 10 (a partir de 10.0.18999.1), nas configurações padrão, ele retorna:

  • C:\ProgramData\Docker no modo "contêineres do Windows"
  • /var/lib/docker, no modo "contêineres Linux"
corvo vulcano
fonte
No CentOS eu tive que usar DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", mas no final é um arquivo, não um diretório
HairOfTheDog
Tem certeza de que não é um diretório? Para mim, sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"liste o conteúdo deste diretório.
quer