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?
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?
Odpowiedzi:
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 metadanedocker infoi znajdź rzeczywistą lokalizację właściwą dla konfiguracji .
Docker for Macz 2 obrazów po 1,5 GB każdy i /var/libnie ma katalogu docker.
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.
ubuntu, nginx), czy to jest lokalizacja dla wszystkich kontenerów? Oryginalne pytanie dotyczy zdjęć , a nie pojemników ...
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.
du -hd1 ~/Library/Containers/com.docker.docker/Data/
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 .
%USERPROFILE%\.docker\machine\machines (zwróć uwagę na kropkę na ścieżce)
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
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/dataPlik metadanych:
/var/lib/docker/devicemapper/devicemapper/metadata
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).
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.
C:\ProgramData\docker\windowsfilterdla mnie pliki obrazów . Więcej informacji: stackoverflow.com/a/39971954/188740
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.
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

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.
W Docker dla Windows (macierzysty Windows) domyślna pamięć kontenerów to:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
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?
Jeśli używasz Dockera dla MAC (nie boot2docker), to lokalizacja to/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.qcow2znalazłem obraz. Ale to nie są pojemniki. Nie widać ich w katalogu Danych naprawdę ..
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
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
- Zatrzymaj dokera itp
- Wpisz „Menedżer funkcji Hyper-V” w polu wyszukiwania paska zadań i uruchom go.
- Wybierz komputer w lewym panelu (mój nazywa się DESKTOP-CBP **)
- Kliknij prawym przyciskiem myszy odpowiednią maszynę wirtualną (moja nazywa się MobyLinuxVM)
- Wybierz „Wyłącz” (jeśli jest uruchomiony)
- Kliknij ponownie prawym przyciskiem myszy i wybierz „Przenieś”
- Postępuj zgodnie z instrukcjami
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?
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żywam boot2docker dla Docker na Mac OSX, więc obrazy są przechowywane w /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.
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.
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"]]
sprawdź folder dokera w /var/lib
obrazy są przechowywane w poniższej lokalizacji:
/var/lib/docker/image/overlay2/imagedb/content
/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.
Ś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)
docker buildpolecenia?
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 .
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”.
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.
Zgodnie z podręcznikiem Docker Pierwsze kroki „Twój wbudowany obraz” znajduje się w „lokalnym rejestrze obrazów Docker na twoim komputerze”.
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ź.
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”DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", ale ostatecznie jest to plik, a nie katalog
sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"wypisz zawartość tego katalogu.