Ich habe die Container im Verzeichnis gefunden /var/lib/docker/containers
, aber ich kann die Bilder nicht finden.
Unter welchen Verzeichnissen und Dateien befinden sich /var/lib/docker
?
Ich habe die Container im Verzeichnis gefunden /var/lib/docker/containers
, aber ich kann die Bilder nicht finden.
Unter welchen Verzeichnissen und Dateien befinden sich /var/lib/docker
?
Antworten:
Der Inhalt des /var/lib/docker
Verzeichnisses hängt vom Treiber ab, den Docker für die Speicherung verwendet .
In der Standardeinstellung ist dies aufs
aber fällt zurück overlay
, overlay2
, btrfs
, devicemapper
oder zfs
je nach Kernel - Unterstützung. In den meisten Orten wird dies sein, aufs
aber die RedHats gingen mitdevicemapper
.
Sie können den Speichertreiber manuell mit der Option -s
oder--storage-driver=
auf den Docker-Dämon einstellen .
/var/lib/docker/{driver-name}
enthält den treiberspezifischen Speicher für den Inhalt der Bilder. /var/lib/docker/graph/<id>
Enthält jetzt nur noch Metadaten zum Bild in den Dateien json
und layersize
.Im Fall von aufs
:
/var/lib/docker/aufs/diff/<id>
hat den Dateiinhalt der Bilder./var/lib/docker/repositories-aufs
ist eine JSON-Datei mit lokalen Bildinformationen. Dies kann mit dem Befehl angezeigt werden docker images
.Im Fall von devicemapper
:
/var/lib/docker/devicemapper/devicemapper/data
speichert die Bilder/var/lib/docker/devicemapper/devicemapper/metadata
die Metadatendocker info
und finden Sie den tatsächlichen Standort für Ihr Setup .
Docker for Mac
mit 2 Bildern à 1,5 GB und /var/lib
habe kein Verzeichnis docker
.
Bei Verwendung von Docker für Mac-Anwendungen werden die Container anscheinend in der VM gespeichert unter:
~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
UPDATE (mit freundlicher Genehmigung von mmorin ):
Ab dem 15. Januar 2019 scheint es nur diese Datei zu geben:
~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw
Das enthält die Docker Disk und alle darin enthaltenen Images und Container.
ubuntu
, nginx
) oder ist dies der Ort für alle Container? Die ursprüngliche Frage fragt nach Bildern , nicht nach Behältern ...
Docker for Mac
mit zwei Bildern von jeweils 1,5 GB und ~/Library/Containers/Data/com.docker.docker/Data
habe kein Verzeichnis com.docker.driver.amd64-linux
und die einzige große Datei ist vms/0/Docker.raw
mit 3,6 GB.
du -hd1 ~/Library/Containers/com.docker.docker/Data/
Das war die alte Art zu tun, jetzt hat es sich geändert. Ignorieren Sie diese Antwort ab 2019
Im Sonderfall von Mac OS X oder Windows werden Ihre Docker-Images mithilfe von boot2docker in einer von boot2docker verwalteten VirtualBox-VM gespeichert.
Diese VM wird an einem normalen Ort für VirtualBox-Images gespeichert:
OS X: ~/VirtualBox VMs/boot2docker-vm
Windows: %USERPROFILE%/VirtualBox VMs/boot2docker-vm
Sie können es zurücksetzen, indem Sie es ausführen (WARNUNG: Dadurch werden alle Bilder zerstört, die Sie bisher erstellt und heruntergeladen haben):
boot2docker down
boot2docker destroy
boot2docker init
boot2docker up
Dies ist besonders nützlich, wenn Sie beim Erstellen / Debuggen eines Builds ohne die nützlichen Optionen --rm Tonnen von Zwischenbildern beibehalten haben. Ich zitiere sie hier als Referenz: Verwendung:
docker build -t webapp --rm=true --force-rm=true .
anstatt:
docker build -t webapp .
%USERPROFILE%\.docker\machine\machines
(Bitte beachten Sie den
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
Tatsächlich werden Docker-Images in zwei Dateien gespeichert, wie mit dem folgenden Befehl gezeigt
$ docker info
Datendatei:
/var/lib/docker/devicemapper/devicemapper/data
Metadatendatei:
/var/lib/docker/devicemapper/devicemapper/metadata
docker info
ist dies sehr nützlich, aber die Ausgabe Docker Root Dir: /var/lib/docker
gibt nicht den Speicherort des Bildes an (siehe Mac-spezifische Antwort oben).
Auf dem neu veröffentlichten 'Docker für Windows', der Hyper-V verwendet, befinden sich Daten auf der virtuellen Docker-Festplatte:
C: \ Benutzer \ Öffentlich \ Dokumente \ Hyper-V \ Virtuelle Festplatten \ MobyLinuxVM.vhdx
Sie können auch den 'Hyper-V Manager' für den Zugriff auf Docker / MobyLinuxVM öffnen.
C:\ProgramData\docker\windowsfilter
für mich bereit. Weitere Informationen: stackoverflow.com/a/39971954/188740
Die Bilder werden in gespeichert /var/lib/docker/graph/<id>/layer
.
Beachten Sie, dass Bilder nur vom übergeordneten Bild abweichen. Die übergeordnete ID wird mit den Metadaten des Bildes gespeichert /var/lib/docker/graph/<id>/json
.
Wenn Sie docker run
ein Bild. AUFS wird alle Ebenen in einem verwendbaren Dateisystem zusammenführen.
Unter Ubuntu können Sie mit laufenden Bildern "spielen"
sudo baobab /var/lib/docker
Tatsächlich werden Bilder in gespeichert /var/lib/docker/aufs/diff
Für jemanden, der die Docker-Toolbox verwendet (die Docker-Maschine verwendet), sind die Antworten zu boot2docker unter Mac OS X ungültig. Die Docker-Maschinen-VM heißt "Standard" und ist im /Users/<username>/.docker/machine/machines/default/
Verzeichnis vorhanden.
In Docker für Windows (natives Windows) befindet sich der Standardcontainerspeicher unter:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
docker build
Befehl ausgeführt und sehe keine Datei, die meiner Meinung nach die Bilddatei ist. Ich sehe einige Ordner und einige Textdateien (z. B. service.txt). Welcher Dateityp und mit welcher Dateierweiterung wird docker build
erstellt?
Wenn Sie Docker für MAC verwenden (nicht boot2docker
), ist der Speicherort/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
Ich habe das Bild gefunden. Aber das sind nicht die Container. Sehen Sie sie nicht wirklich in diesem Datenverzeichnis.
Wie hier beantwortet , befindet es sich auf einem Mac unter
/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Wenn Sie Tristans Antwort erweitern, können Sie in Windows mit Hyper-V das Bild mit den folgenden Schritten von matthuisman aus verschieben:
In Windows 10
- Stop Docker etc.
- Geben Sie "Hyper-V Manager" in das Suchfeld der Taskleiste ein und führen Sie es aus.
- Wählen Sie Ihren PC im linken Bereich aus (meiner heißt DESKTOP-CBP **)
- Klicken Sie mit der rechten Maustaste auf die richtige virtuelle Maschine (meine heißt MobyLinuxVM)
- Wählen Sie "Ausschalten" (wenn es läuft)
- Klicken Sie erneut mit der rechten Maustaste darauf und wählen Sie "Verschieben".
- Befolgen Sie die Anweisungen
docker build
Befehl erstellten Bilder zu finden . Ich bin auf einem Windows 10-Computer. Ich schaue in C: \ Benutzer \ Öffentlich \ Dokumente \ Hyper-V \ Virtuelle Festplatten, aber alles, was ich sehe, ist MobyLinuxVM.vhdx. Wo werden die tatsächlichen Bilder gespeichert?
Wenn Sie berücksichtigen, dass Docker noch in einer VM ausgeführt wird, beziehen sich die Systempfade auf die VM und nicht auf das Mac Osx-System. Wie es heißt, ist alles in einer VM-Datei enthalten:
/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Versuchen Sie, Alpine Image mit dieser Volume-Option und dem Befehl ls auszuführen, mit dem Sie den VM-Host auflisten können:
Docker-Lauf --rm -it -v /: / vm-root alpine: Rand ls -l / vm-root
Danach versuchen Sie einfach:
docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker
Jetzt können Sie den Docker-Ordner vom VM-Host aus auflisten
Ich verwende den boot2docker für Docker unter Mac OSX, damit die Bilder im gespeichert werden /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk
.
Ich kann diese Frage nur für Ubuntu-Benutzer beantworten:
Das Stammverzeichnis von Docker wird gefunden, wenn Sie den Befehl ausführen docker info
Das Docker-Verzeichnis wird in dieser Zeile angegeben: " Docker Root Dir: /var/lib/docker
"
Die Docker-Images werden im Docker-Verzeichnis gespeichert:
/var/lib/docker/aufs/diff/
Denken Sie daran, dass diese Dinge nicht in allen Docker-Versionen gleich sind. Derzeit verwende ich 1.12.3.
Verwenden Sie den docker info
Befehl, um systemweite Informationen anzuzeigen, und der Standort kann variieren.
Abhängig vom verwendeten Speichertreiber können zusätzliche Informationen angezeigt werden, z. B. Poolname, Datendatei, Metadatendatei, verwendeter Datenbereich, Gesamtdatenbereich, verwendeter Metadatenbereich und Gesamtmetadatenbereich.
In der Datendatei werden die Bilder gespeichert, und in der Metadatendatei werden die Metadaten zu diesen Bildern gespeichert. Bei der ersten Ausführung
/var/lib/docker
weist Docker eine bestimmte Menge an Daten- und Metadatenbereich aus dem verfügbaren Speicherplatz auf dem Volume zu, auf dem bereitgestellt wird.
Hier ist das Beispiel unter Ubuntu (siehe 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
...
Und hier ist das Beispiel für Travis CI (siehe Docker Root Dir ):
$ docker info
Server Version: 17.09.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
...
Docker Root Dir: /var/lib/docker
...
Sie können --format
Parameter verwenden, um diese Informationen in eine einzelne Datei zu extrahieren, z
$ docker info --format '{{.DriverStatus}}'
[[Root Dir /var/snap/docker/common/var-lib-docker/aufs] [Backing Filesystem extfs] [Dirs 265] [Dirperm1 Supported true]]
oder:
$ docker info --format '{{json .DriverStatus}}'
[["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]
Suchen Sie nach dem Docker-Ordner in /var/lib
Die Bilder werden an einem der folgenden Orte gespeichert:
/var/lib/docker/image/overlay2/imagedb/content
/var/lib/docker/image/overlay2/
. Beachten Sie auch, dass dies der Fall ist, weil Ihre Docker-Engine overlay2
als Speichertreiber verwendet wird.
Umgebung: Windows 10 Pro, Docker Desktop 2.0.3.0 Edge
Klicken Sie mit der rechten Maustaste auf das Docker-Symbol in der Taskleiste. Wählen Sie Einstellungen aus - Erweitert:
Speicherort des Disk-Images (kann über den Browser bearbeitet werden):
C: \ Benutzer \ Öffentlich \ Dokumente \ Hyper-V \ Virtuelle Festplatten \ DockerDesktop.vhdx
(es ist da - Dokumentenverzeichnis ist versteckt)
docker build
Befehl erstellte Image ?
Unter Fedora verwendet Docker LVM zur Speicherung, sofern verfügbar. Auf meinem System docker info
zeigt:
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 diesem Fall müssen Sie zur Erhöhung des Speichers LVM-Befehlszeilentools oder kompatible Partitionsmanager wie blivet verwenden .
In Windows 2016 verwendet Docker (DockerMsftProvider) den Ordner "Windowsfilter" unter Docker-Stammverzeichnis
>docker info
...
Storage Driver: windowsfilter
...
Docker Root Dir: C:\ProgramData\docker
...
Es verwendet den Ordner "tmp" unter dem Docker-Stammverzeichnis, um die Dateien herunterzuladen, und löscht die Dateien, nachdem die heruntergeladenen Dateien in den Ordner "windowsfilter" extrahiert wurden.
Ich konnte die Frage mit Docker Version 18.09 auf Macos mit den obigen Antworten nicht lösen und versuchte es erneut.
Die einzige tatsächliche Lösung für mich war die Verwendung dieser docker-compose.yml
Konfiguration:
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
Nach dem Start mit hatte docker-compose up
ich endlich /tmp/host-volume
von Macos als beschreibbares Volume aus dem Container freigegeben:
> 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
Hoffe das hilft auch anderen.
Laut dem Docker-Handbuch " Erste Schritte " befindet sich "Ihr erstelltes Image" "in der lokalen Docker-Image-Registrierung Ihres Computers".
Das ist mir immer noch fremd, denn jetzt führt es zur Frage. Wo befindet sich die lokale Docker-Image-Registrierung meines Computers?
Trotzdem denke ich definitiv, dass es sich lohnt, diese Informationen als Antwort zu teilen.
Wenn jemand es für Skriptzwecke benötigt, ist hier eine einzeilige Lösung.
grep
Versuchen Sie in der POSIX-Shell bei aktiviertem PCRE Folgendes:
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: ")}})"
Beachten Sie, dass unter Windows 10 (ab 10.0.18999.1
) in Standardkonfigurationen Folgendes zurückgegeben wird:
C:\ProgramData\Docker
im Modus "Windows-Container"/var/lib/docker
im Modus "Linux-Container"DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')"
, aber am Ende ist es eine Datei, kein Verzeichnis
sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"
Listen Sie für mich den Inhalt dieses Verzeichnisses auf.