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?


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

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.


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 .

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


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.


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.


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


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.


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

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/


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

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

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


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.


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.


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

3

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


3

sprawdź folder dokera w /var/lib

obrazy są przechowywane w poniższej lokalizacji:

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

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 

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


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)


Czy C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx jest obrazem utworzonym za pomocą docker buildpolecenia?
user3731622,


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 .


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


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


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.


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.


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


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”

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.