Gdzie są przechowywane obrazy Docker na komputerze hosta?

874

Udało mi się znaleźć pojemniki w katalogu /var/lib/docker/containers, ale nie mogę znaleźć obrazów.

Jakie są katalogi i pliki /var/lib/docker?

nemo
źródło
2
W takich przypadkach najlepiej podać specyfikę systemu operacyjnego w tytule pytania i / lub oświadczeniu pytania. Podano dwie dobre odpowiedzi dla systemu Linux i MacOS (Mac OS X).
Webel IT Australia - zwycięzca

Odpowiedzi:

637

Zawartość /var/lib/dockerkatalogu różni się w zależności od sterownika, którego Docker używa do przechowywania .

Domyślnie będzie to aufsjednak może spaść z powrotem overlay, overlay2, btrfs, devicemapperlub zfsw zależności od wsparcia jądra. W większości miejsc tak będzie, aufsale poszły z RedHatsdevicemapper .

Możesz ręcznie ustawić sterownik pamięci za pomocą opcji -slub--storage-driver= do demona Docker .

  • /var/lib/docker/{driver-name} będzie zawierał specyficzne dla sterownika miejsce na zawartość obrazów.
  • /var/lib/docker/graph/<id>teraz zawiera tylko metadane dotyczące obrazu w plikach jsoni layersize.

W przypadku aufs:

  • /var/lib/docker/aufs/diff/<id> ma zawartość pliku obrazów.
  • /var/lib/docker/repositories-aufsto plik JSON zawierający lokalne informacje o obrazie. Można to wyświetlić za pomocą polecenia docker images.

W przypadku devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data przechowuje obrazy
  • /var/lib/docker/devicemapper/devicemapper/metadata metadane
  • Uwaga: te pliki to „rzadkie” pliki z ograniczoną obsługą, więc nie są tak duże, jak się wydają.
Matt
źródło
1
Czy mogę zobaczyć zawartość w środku, instalując ją w jakiś sposób?
rv
1
Jeśli ustawisz sterownik magazynu, gdy jest już uruchomiony i ma kilka działających kontenerów z obrazami, czy migruje datę przy następnym ponownym uruchomieniu demona? Jeśli nie, to jak zmodyfikować sterownik pamięci w tym przypadku?
BTR Naidu
7
W przypadku systemu MacOS patrz odpowiedź poniżej
ProfNandaa
91
Zrób sobie przysługę i nie „sprawdzaj domyślnych”. Użyj docker infoi znajdź rzeczywistą lokalizację właściwą dla konfiguracji .
Bruno Bronosky
5
Wygląda na to, że się zmieniło. Korzystam Docker for Macz 2 obrazów po 1,5 GB każdy i /var/libnie ma katalogu docker.
miguelmorin
298

Podczas korzystania z aplikacji Docker dla komputerów Mac wydaje się, że kontenery są przechowywane w maszynie wirtualnej znajdującej się pod adresem:

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

AKTUALIZACJA (dzięki uprzejmości mmorin ):

Według stanu na 15 stycznia 2019 r. Wydaje się, że jest tylko ten plik:

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

który zawiera Docker Disk oraz wszystkie zawarte w nim obrazy i kontenery.

mirosval
źródło
7
Czy to jest lokalizacja dla wszystkich zdjęć (jak ubuntu, nginx), czy to jest lokalizacja dla wszystkich kontenerów? Oryginalne pytanie dotyczy zdjęć , a nie pojemników ...
Siu Ching Pong -Asuka Kenji-
2
Jeśli pamiętasz, że Docker nadal działa na maszynie wirtualnej, ścieżki systemowe są względne do maszyny wirtualnej, a nie z systemu Mac OSX. Spróbuj wykonać to polecenie: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root nad następnie: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker Możesz wyświetlić folder
dokera
3
Wygląda na to, że się zmieniło. Korzystam Docker for Macz dwóch obrazów po 1,5 GB każdy i ~/Library/Containers/Data/com.docker.docker/Datanie ma katalogu, com.docker.driver.amd64-linuxa jedyny duży plik ma vms/0/Docker.raw3,6 GB.
miguelmorin
1
To, czy używany jest qcow2, czy surowe, zależy od tego, czy korzystasz z MacOS High Sierra z APFS, czy poniżej: docs.docker.com/docker-for-mac/faqs/#disk-usage
Peter
1
Sprawdź rozmiar dla mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Efren
122

to był stary sposób, teraz się zmienił. Zignoruj ​​tę odpowiedź od 2019 r

W szczególnym przypadku Mac OS X lub Windows, przy użyciu boot2docker, obrazy Docker są przechowywane w maszynie wirtualnej VirtualBox zarządzanej przez boot2docker.

Ta maszyna wirtualna będzie przechowywana w normalnym miejscu obrazów VirtualBox:

      OS X: ~/VirtualBox VMs/boot2docker-vm

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

Możesz go zresetować, uruchamiając (OSTRZEŻENIE: Zniszczy to wszystkie obrazy, które dotąd zbudowałeś i pobrałeś):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

Jest to szczególnie przydatne, jeśli podczas budowania / debugowania kompilacji nie użyto ton pośrednich obrazów bez przydatnych opcji --rm, cytuję je tutaj w celach informacyjnych: Użyj:

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

zamiast:

docker build -t webapp .
Phil L.
źródło
16
Po nowej instalacji Dockera w systemie Windows 10 mogę potwierdzić, że wynik kliknięcia skrótu Docker Quickstart Terminal po raz pierwszy tworzy maszynę wirtualną (VM) o nazwie „default” (po kilku nieudanych uruchomieniach - uruchamiaj ją do to działa). Ta „domyślna” maszyna wirtualna może znajdować się w systemie Windows pod adresem: %USERPROFILE%\.docker\machine\machines (zwróć uwagę na kropkę na ścieżce)
AnotherLongUsername
6
W nowszych wersjach boot2docker jest teraz maszyną dokującą . Zobacz docs.docker.com/machine/migrate-to-machine
khylo
3
Czy można zmienić tę lokalizację?
dhblah
13
Odpowiedź nie jest już poprawna dla systemu Windows 10. Zamiast tego zobacz nowszą odpowiedź z @tristan, która zawiera odniesieniaC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers,
5
% USERPROFILE% \. Doker nadal jest poprawny dla konfiguracji win7.
RMorrisey,
119

W rzeczywistości obrazy dokerów są przechowywane w dwóch plikach, jak pokazano za pomocą następującego polecenia

$ docker info

Plik danych: /var/lib/docker/devicemapper/devicemapper/data

Plik metadanych: /var/lib/docker/devicemapper/devicemapper/metadata

Marc Rechté
źródło
3
Dotyczy to wariantów RedHat. Oni nie zdecydował się pójść Aufs jak to nie jest jądro .
Matt
8
Tak, niestety te dwa wiersze „pliku danych” („Meta)” nie pojawiają się w każdym oknie dokowanym. To zależy od zastosowanego sterownika
Orabîg,
Odpowiedź @DmitryYudin mirosval działa w przypadku najnowszej wersji Docker na komputery Mac .
Franklin Yu
8
Prawidłowa odpowiedź nie brzmi: „Tam jest na MOJEJ maszynie”. Prawidłowa odpowiedź brzmi: „Oto, jak ją znaleźć na SWOJEJ maszynie”. To jest poprawna odpowiedź. Dołączyłem do firmy z 11 różnymi woluminami EBS pełnymi obrazów dokerów. Ta odpowiedź pozwoliła mi zorientować się, jaki był obecny „Root Dir”.
Bruno Bronosky
W systemie Mac OS X (przynajmniej Yosemite, którym jest EOL wrt Docker), docker infojest bardzo przydatny, ale dane wyjściowe Docker Root Dir: /var/lib/dockernie wskazują miejsca przechowywania obrazów (patrz odpowiedź specyficzna dla komputerów Mac powyżej).
Webel IT Australia - zwycięzca
70

W nowo wydanej aplikacji „Docker dla systemu Windows”, która korzysta z funkcji Hyper-V, dane znajdują się na wirtualnym dysku twardym Docker:

C: \ Users \ Public \ Documents \ Hyper-V \ Wirtualne dyski twarde \ MobyLinuxVM.vhdx

Możesz także otworzyć Menedżera funkcji Hyper-V, aby uzyskać dostęp do Docker / MobyLinuxVM.

Tristan
źródło
13
Docker w rocznicowej aktualizacji systemu Windows 10 umieszcza C:\ProgramData\docker\windowsfilterdla mnie pliki obrazów . Więcej informacji: stackoverflow.com/a/39971954/188740
Johnny Oshika
1
„Hyper-V Manager” to odpowiedź!
Reza
68

Obrazy są przechowywane w /var/lib/docker/graph/<id>/layer.

Pamiętaj, że obrazy różnią się od obrazu nadrzędnego. Identyfikator nadrzędny jest przechowywany z metadanymi obrazu /var/lib/docker/graph/<id>/json.

Kiedy jesteś docker runobrazem. AUFS „scali” wszystkie warstwy w jeden użyteczny system plików.

skrzyp
źródło
11
Ta odpowiedź jest teraz nieaktualna, przenieśli różne rzeczy.
Air
7
@ Air Czy możesz opublikować to, co się zmieniło?
Elijah Lynn
1
nie ma już folderu z grafem
Paddy
49

W Ubuntu możesz „grać” z uruchomionymi obrazami

sudo baobab /var/lib/docker

W rzeczywistości obrazy są przechowywane w /var/lib/docker/aufs/diff

zrzut ekranu przedstawiający narzędzie do analizy dysku baobab działające na / var / lib / docker

test30
źródło
Rzeczywiście miło. Na Macu DaisyDisk jest podobny (wyświetlacz koła), GrandPerspective jest również przydatny (prostokąty).
Webel IT Australia - zwycięzca
Wydaje się, że jest to jedyny niezawodny sposób na znalezienie tego.
Alexandr
48

W przypadku osoby korzystającej z przybornika Docker (korzystającego z maszyny dokującej) odpowiedzi dotyczące boot2docker w systemie Mac OS X są nieprawidłowe. Maszyna wirtualna maszyny dokującej jest nazywana „domyślną” i istnieje w /Users/<username>/.docker/machine/machines/default/katalogu.

mbbce
źródło
3
Nie mogę znaleźć żadnych kontenerów ani folderów obrazów w tym katalogu.
lvarayut
3
poszukaj disk.vmdk w tym katalogu
Łukasz
1
$ docker images -a daje około 1 giganta obrazów, podczas gdy disk.vmdk w ~ / .docker ma około 20 koncertów. Dlaczego?
Grav
Gdzie jest przechowywany w systemie Windows?
Shreyas
@Grav: Maszyna wirtualna przydziela 20 koncertów do wykorzystania w przyszłości, ale wykorzystuje tylko 1 gig dla obrazów.
primavera133
22

W Docker dla Windows (macierzysty Windows) domyślna pamięć kontenerów to:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...
Tormod Haugene
źródło
Uruchomiłem docker buildpolecenie i nie widzę pliku, który moim zdaniem jest plikiem obrazu. Widzę niektóre foldery i niektóre pliki tekstowe (np. Service.txt). Jaki typ pliku i z jakim rozszerzeniem docker buildtworzy?
user3731622
22

Jeśli używasz Dockera dla MAC (nie boot2docker), to lokalizacja to/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

Sunil Fernandes
źródło
Tak, kiedy zrobiłem: 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.qcow2znalazłem obraz. Ale to nie są pojemniki. Nie widać ich w katalogu Danych naprawdę ..
rhand
1
Ale jak wspomniano przed tobą tutaj stackoverflow.com/a/37642236/460885 , to wewnątrz tego obrazu znajdują się pojemniki.
rhand
7

Jak tu odpowiedziano , jeśli korzystasz z komputera Mac, znajduje się on pod adresem

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Ricardo Martins
źródło
2
Docker.qcow2? Jak mam wyciągnąć z tego konkretny obraz dokera?
AlxVallejo
7

Rozwijając odpowiedź Tristana, w systemie Windows za pomocą funkcji Hyper-V możesz przenieść obraz, wykonując następujące kroki z Matthuisman:

W systemie Windows 10

  1. Zatrzymaj dokera itp
  2. Wpisz „Menedżer funkcji Hyper-V” w polu wyszukiwania paska zadań i uruchom go.
  3. Wybierz komputer w lewym panelu (mój nazywa się DESKTOP-CBP **)
  4. Kliknij prawym przyciskiem myszy odpowiednią maszynę wirtualną (moja nazywa się MobyLinuxVM)
  5. Wybierz „Wyłącz” (jeśli jest uruchomiony)
  6. Kliknij ponownie prawym przyciskiem myszy i wybierz „Przenieś”
  7. Postępuj zgodnie z instrukcjami
boni
źródło
2
To tylko przesuwa maszynę Hyper-V, a nie obrazy, obrazy nadal byłyby przechowywane tam, gdzie jest lokalizacja VHD.
olive_tree
@olive_tree Próbuję znaleźć obrazy utworzone za pomocą docker buildpolecenia. Jestem na komputerze z systemem Windows 10. Patrzę w C: \ Users \ Public \ Documents \ Hyper-V \ Wirtualne dyski twarde, ale widzę tylko MobyLinuxVM.vhdx. Gdzie są przechowywane rzeczywiste obrazy?
user3731622
5

Jeśli pamiętasz, że Docker nadal działa na maszynie wirtualnej, ścieżki systemowe są względne do maszyny wirtualnej, a nie z systemu Mac OSX. Jak mówi, wszystko jest zawarte w pliku VM:

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

Spróbuj uruchomić obraz Alpine przy użyciu tej opcji woluminu i polecenia ls, aby wyświetlić listę hosta VM:

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

Następnie spróbuj:

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

Teraz możesz wyświetlić folder dokera z hosta maszyny Wirtualnej

użytkownik1842947
źródło
Dzięki! To jedyna odpowiedź, która działała dla mnie w systemie Windows 10 z funkcją Hyper-v. Byłem w stanie wyczyścić uszkodzone pliki w nieuchwytnym folderze / var / lib / docker / overlay2.
Ali Cheaito
4

Używam boot2docker dla Docker na Mac OSX, więc obrazy są przechowywane w /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.

Chu-Siang Lai
źródło
4

Mogę odpowiedzieć na to pytanie tylko dla użytkowników Ubuntu:

Katalog główny dokera można znaleźć po uruchomieniu polecenia docker info

Katalog dokerów zostanie podany w tym wierszu: „ Docker Root Dir: /var/lib/docker

Informacje o obrazach dokerów są przechowywane w katalogu dokerów: /var/lib/docker/aufs/diff/

Pamiętaj, że te rzeczy nie są takie same we wszystkich wersjach dokera. Obecnie używam 1.12.3.

Arif A.
źródło
4

Użyj docker infopolecenia, aby wyświetlić informacje systemowe, a lokalizacja może się różnić.

W zależności od używanego sterownika pamięci masowej mogą zostać wyświetlone dodatkowe informacje, takie jak nazwa puli, plik danych, plik metadanych, wykorzystana przestrzeń danych, łączna przestrzeń danych, wykorzystana przestrzeń metadanych i całkowita przestrzeń metadanych.

Plik danych to miejsce, w którym przechowywane są obrazy, a plik metadanych to miejsce, w którym przechowywane są metadane dotyczące tych obrazów. Przy pierwszym uruchomieniu Docker przydziela pewną ilość miejsca na dane i miejsce na meta z miejsca dostępnego na woluminie, w którym /var/lib/dockerjest zamontowany.

Oto przykład Ubuntu (sprawdź katalog główny ):

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

A oto przykład na Travis CI (patrz katalog Docker Root Dir ):

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

Możesz użyć --formatparametru, aby wyodrębnić te informacje do jednego pliku, np

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

lub:

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

W Docker dla Windows dzienniki są tutaj: %USERPROFILE%\AppData\Local\Docker

omasoud
źródło
3

sprawdź folder dokera w /var/lib

obrazy są przechowywane w poniższej lokalizacji:

/var/lib/docker/image/overlay2/imagedb/content
Chandra Pal
źródło
4
ma tylko folder sha256
toto
Myślę, że chodziło po prostu: /var/lib/docker/image/overlay2/. Należy również pamiętać, że dzieje się tak z powodu faktu, że silnik Docker używa overlay2jako sterownika pamięci masowej.
Guy Avraham
3

użyj docker inspect container_id
znajdź folder w MergedDir

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 
madjardi
źródło
3

W przypadku „Docker Desktop” kliknij ikonę zasobnika systemowego dokera i kliknij „Ustawienia”. wprowadź opis zdjęcia tutaj

Na karcie Zaawansowane możesz zobaczyć lokalizację obrazu dysku.

wprowadź opis zdjęcia tutaj

Nishān Wickramrathna
źródło
2

Środowisko: Windows 10 Pro, okno dokowane 2.0.3.0 edge

kliknij prawym przyciskiem myszy ikonę dokowania na pasku zadań, wybierz ustawienia - zaawansowane:

Lokalizacja obrazu dysku (edytowalna przez przeglądarkę):

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

(jest tam - katalog dokumentów jest ukryty)

theRiley
źródło
Czy C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx jest obrazem utworzonym za pomocą docker buildpolecenia?
user3731622,
2
sudo docker info | grep -e "Root Dir"
Mꜳltus
źródło
1

W Fedorze Docker używa LVM do przechowywania, jeśli jest dostępny. W moim systemie docker infopokazuje:

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

W takim przypadku, aby zwiększyć pamięć, będziesz musiał użyć narzędzi wiersza poleceń LVM lub zgodnych menedżerów partycji, takich jak blivet .

eddygeek
źródło
1

W systemie Windows 2016 doker (DockerMsftProvider) używa folderu „windowsfilter” w katalogu głównym dokera

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

Do pobrania plików używa folderu „tmp” w katalogu głównym dokera, a następnie usuwa pliki po rozpakowaniu pobranych plików do folderu „windowsfilter”.

shanmuga raja
źródło
0

W Debianie Unstable / Sid,

docker info znaleźć informacje o całym systemie.

obrazy są przechowywane w /var/lib/docker/image/overlay2/imagedb/contenti

pojemniki są przechowywane w /var/lib/docker/containers

wersja dokera, wersja 18.06.0-ceAPI1.38

Dhanuka
źródło
0

Nie mogłem rozwiązać problemu z Dockerem w wersji 18.09 na Macu, korzystając z powyższych odpowiedzi i spróbowałem ponownie.

Jedynym faktycznym rozwiązaniem dla mnie było użycie tej docker-compose.ymlkonfiguracji:

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

Po uruchomieniu z docker-compose upostatecznie /tmp/host-volumeudostępniono z makr jako wolumin do zapisu z kontenera:

> 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

Mam nadzieję, że to pomaga również innym.

axelrose
źródło
0

Obrazy są przechowywane wewnątrz, /var/lib/dockera następnie w odpowiednim storage driverkatalogu.

Używany sterownik pamięci można określić, wykonując docker infopolecenie.

anshul
źródło
0

Zgodnie z podręcznikiem Docker Pierwsze kroki „Twój wbudowany obraz” znajduje się w „lokalnym rejestrze obrazów Docker na twoim komputerze”.

wprowadź opis zdjęcia tutaj

To wciąż jest dla mnie dziwne, ponieważ teraz prowadzi do pytania. Gdzie jest lokalny rejestr obrazów Docker mojego komputera?

Niemniej jednak zdecydowanie uważam, że tę informację warto udostępnić jako odpowiedź.

użytkownik3731622
źródło
Haha TBH Myślę, że to co najwyżej komentarz. Byłby jednak świetny komentarz!
Mong H. Ng
0

Jeśli ktoś potrzebuje go do celów skryptowych, oto rozwiązanie jednowierszowe.

W powłoce POSIX, przy włączonym PCRE grep, spróbuj:

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

W PowerShell:

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

Uwaga: w systemie Windows 10 (od 10.0.18999.1) w domyślnych konfiguracjach zwraca:

  • C:\ProgramData\Docker w trybie „Kontenery Windows”
  • /var/lib/docker, w trybie „Kontenery Linux”
kruk wulkaniczny
źródło
Na CentOS musiałem użyć DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", ale ostatecznie jest to plik, a nie katalog
HairOfTheDog
Czy na pewno nie jest to katalog? Dla mnie, sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"wypisz zawartość tego katalogu.
vulcan raven