Wo werden Docker-Images auf dem Host-Computer gespeichert?

874

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?

nemo
quelle
2
Geben Sie in solchen Fällen am besten Einzelheiten des Betriebssystems im Fragentitel und / oder in der Fragenerklärung an. Für Linux und MacOS (Mac OS X) wurden zwei gute Antworten gegeben.
Webel IT Australia - Upvoter

Antworten:

637

Der Inhalt des /var/lib/dockerVerzeichnisses hängt vom Treiber ab, den Docker für die Speicherung verwendet .

In der Standardeinstellung ist dies aufsaber fällt zurück overlay, overlay2, btrfs, devicemapperoder zfsje nach Kernel - Unterstützung. In den meisten Orten wird dies sein, aufsaber die RedHats gingen mitdevicemapper .

Sie können den Speichertreiber manuell mit der Option -soder--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 jsonund layersize.

Im Fall von aufs:

  • /var/lib/docker/aufs/diff/<id> hat den Dateiinhalt der Bilder.
  • /var/lib/docker/repositories-aufsist 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 Metadaten
  • Beachten Sie, dass es sich bei diesen Dateien um dünn bereitgestellte "spärliche" Dateien handelt, die also nicht so groß sind, wie sie scheinen.
Matt
quelle
1
Kann ich den Inhalt darin sehen, indem ich ihn auf irgendeine Weise einbinde?
rv
1
Wenn Sie den Speichertreiber festlegen, nachdem er bereits ausgeführt wird und einige Container mit Images ausgeführt werden, wird dann das Datum beim nächsten Neustart des Dämons migriert? Wenn nicht, wie kann der Speichertreiber in diesem Fall geändert werden?
BTR Naidu
7
Für MacOS siehe Antwort unten
ProfNandaa
92
Tun Sie sich selbst einen Gefallen und überprüfen Sie nicht die Standardeinstellungen. Verwenden docker infound finden Sie den tatsächlichen Standort für Ihr Setup .
Bruno Bronosky
5
Dies scheint sich geändert zu haben. Ich verwende Docker for Macmit 2 Bildern à 1,5 GB und /var/libhabe kein Verzeichnis docker.
Miguelmorin
298

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.

Mirosval
quelle
7
Ist dies der Ort für alle Bilder (wie ubuntu, nginx) oder ist dies der Ort für alle Container? Die ursprüngliche Frage fragt nach Bildern , nicht nach Behältern ...
Siu Ching Pong -Asuka Kenji-
2
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. Versuchen Sie diesen Befehl: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root nad danach: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker Sie können den Docker-Ordner vom WM-Host
auflisten
3
Dies scheint sich geändert zu haben. Ich verwende Docker for Macmit zwei Bildern von jeweils 1,5 GB und ~/Library/Containers/Data/com.docker.docker/Datahabe kein Verzeichnis com.docker.driver.amd64-linuxund die einzige große Datei ist vms/0/Docker.rawmit 3,6 GB.
Miguelmorin
1
Ob qcow2 oder raw verwendet wird, hängt davon ab, ob Sie mit APFS oder darunter bei MacOS High Sierra sind: docs.docker.com/docker-for-mac/faqs/#disk-usage
Peter
1
Überprüfen Sie die Größe für Mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Efren
122

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 .
Phil L.
quelle
16
Nach einer Neuinstallation von Docker unter Windows 10 kann ich bestätigen, dass durch das erstmalige Klicken auf die Verknüpfung des Docker-Schnellstartterminals eine virtuelle Maschine (VM) mit dem Namen "Standard" erstellt wird (nach einigen erfolglosen Starts - führen Sie sie bis aus Es klappt). Diese 'Standard'-VM befindet sich in Windows unter: %USERPROFILE%\.docker\machine\machines (Bitte beachten Sie den
Punkt
6
In neueren Versionen ist boot2docker jetzt Docker-Maschine . Siehe docs.docker.com/machine/migrate-to-machine
khylo
3
Ist es möglich, diesen Ort zu ändern?
Dhblah
13
Die Antwort ist für Windows 10 nicht mehr korrekt. Stattdessen finden Sie die neuere Antwort von @tristan, auf die verwiesen wirdC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers
5
% USERPROFILE% \. Docker ist für Win7-Setups weiterhin korrekt.
RMorrisey
119

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

Marc Rechté
quelle
8
Ja, leider erscheinen diese beiden Zeilen "(Meta) -Datendatei" nicht in jedem Docker. Es hängt vom verwendeten Treiber ab
Orabîg
Die Antwort von @DmitryYudin mirosval funktioniert für den neuesten Docker für Mac .
Franklin Yu
8
Eine richtige Antwort lautet nicht "Hier befindet es sich auf MEINEM Computer." Eine richtige Antwort lautet: "So finden Sie es auf IHREM Computer." Dies ist eine richtige Antwort. Ich bin einer Firma mit 11 verschiedenen EBS-Bänden voller Docker-Images beigetreten. Mit dieser Antwort konnte ich herausfinden, welches das aktuelle "Root Dir" war.
Bruno Bronosky
Unter Mac OS X (zumindest unter Yosemite, EOL für Docker) docker infoist dies sehr nützlich, aber die Ausgabe Docker Root Dir: /var/lib/dockergibt nicht den Speicherort des Bildes an (siehe Mac-spezifische Antwort oben).
Webel IT Australia - Upvoter
70

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.

Tristan
quelle
13
Docker unter Windows 10 Anniversary Update stellt Bilddateien C:\ProgramData\docker\windowsfilterfür mich bereit. Weitere Informationen: stackoverflow.com/a/39971954/188740
Johnny Oshika
1
'Hyper-V Manager' ist die Antwort!
Reza
68

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 runein Bild. AUFS wird alle Ebenen in einem verwendbaren Dateisystem zusammenführen.

knarren
quelle
11
Diese Antwort ist jetzt veraltet, sie haben die Dinge verschoben.
Air
7
@Air Kannst du posten, was sich bewegt hat?
Elijah Lynn
1
Es gibt keinen Grafikordner mehr
Paddy
49

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

Screenshot mit dem Disk Analyzer Tool Baobab, der unter / var / lib / docker ausgeführt wird

test30
quelle
Tatsächlich nett. Auf dem Mac ist DaisyDisk ähnlich (Radanzeige), GrandPerspective auch nützlich (Rechtecke).
Webel IT Australia - Upvoter
Es scheint der einzig verlässliche Weg zu sein, es zu finden.
Alexandr
48

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.

mbbce
quelle
3
Ich kann keine Container oder Bildordner in diesem Verzeichnis finden.
lvarayut
3
Suchen Sie nach disk.vmdk in diesem Verzeichnis
lukeaus
1
$ docker images -a liefert ungefähr 1 Gig an Bildern, während disk.vmdk in ~ / .docker ungefähr 20 Gigs beträgt. Woher?
Grav
Wo ist es in Windows gespeichert?
Shreyas
@Grav: Die virtuelle Maschine weist 20 Gigs für die zukünftige Verwendung zu, verwendet jedoch nur 1 Gig für Bilder.
Primavera133
22

In Docker für Windows (natives Windows) befindet sich der Standardcontainerspeicher unter:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...
Tormod Haugene
quelle
Ich habe den docker buildBefehl 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 builderstellt?
user3731622
22

Wenn Sie Docker für MAC verwenden (nicht boot2docker), ist der Speicherort/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

Sunil Fernandes
quelle
Ja, als ich a gemacht habe: 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.qcow2Ich habe das Bild gefunden. Aber das sind nicht die Container. Sehen Sie sie nicht wirklich in diesem Datenverzeichnis.
Hand
1
Aber wie gesagt , bevor du an stackoverflow.com/a/37642236/460885 ist es in diesem Bild , dass die Behälter befinden.
Hand
7

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
Ricardo Martins
quelle
2
Docker.qcow2? Wie soll ich daraus ein bestimmtes Docker-Image ziehen?
AlxVallejo
7

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

  1. Stop Docker etc.
  2. Geben Sie "Hyper-V Manager" in das Suchfeld der Taskleiste ein und führen Sie es aus.
  3. Wählen Sie Ihren PC im linken Bereich aus (meiner heißt DESKTOP-CBP **)
  4. Klicken Sie mit der rechten Maustaste auf die richtige virtuelle Maschine (meine heißt MobyLinuxVM)
  5. Wählen Sie "Ausschalten" (wenn es läuft)
  6. Klicken Sie erneut mit der rechten Maustaste darauf und wählen Sie "Verschieben".
  7. Befolgen Sie die Anweisungen
Boni
quelle
2
Dadurch werden nur die Hyper-V-Maschine und nicht die Bilder verschoben. Die Bilder werden weiterhin dort gespeichert, wo sich der VHD-Speicherort befindet.
oliv_tree
@olive_tree Ich versuche, die durch docker buildBefehl 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?
user3731622
5

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

user1842947
quelle
Vielen Dank! Dies ist die einzige Antwort, die unter Windows 10 mit Hyper-v für mich funktioniert hat. Ich konnte die beschädigten Dateien im schwer fassbaren Ordner / var / lib / docker / overlay2 bereinigen.
Ali Cheaito
4

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.

Chu-Siang Lai
quelle
4

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.

Arif A.
quelle
4

Verwenden Sie den docker infoBefehl, 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/dockerweist 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 --formatParameter 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"]]
Kenorb
quelle
3

In Docker für Windows befinden sich die Protokolle hier: %USERPROFILE%\AppData\Local\Docker

omasoud
quelle
3

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
Chandra Pal
quelle
4
dies hat nur sha256 Ordner
toto‘
Ich denke du wolltest einfach : /var/lib/docker/image/overlay2/. Beachten Sie auch, dass dies der Fall ist, weil Ihre Docker-Engine overlay2als Speichertreiber verwendet wird.
Guy Avraham
3

Verwenden docker inspect container_id
Sie den Ordner find unter MergedDir

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 
Madjardi
quelle
3

Klicken Sie für "Docker Desktop" auf das Docker-Taskleistensymbol und dann auf "Einstellungen". Geben Sie hier die Bildbeschreibung ein

Auf der Registerkarte Erweitert sehen Sie den Speicherort des Disk-Images.

Geben Sie hier die Bildbeschreibung ein

Nishān Wickramrathna
quelle
2

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)

theRiley
quelle
Ist C: \ Benutzer \ Öffentlich \ Dokumente \ Hyper-V \ Virtuelle Festplatten \ DockerDesktop.vhdx das mit dem docker buildBefehl erstellte Image ?
user3731622
2
sudo docker info | grep -e "Root Dir"
Mꜳltus
quelle
1

Unter Fedora verwendet Docker LVM zur Speicherung, sofern verfügbar. Auf meinem System docker infozeigt:

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 .

Eddygeek
quelle
1

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.

Shanmuga Raja
quelle
0

Auf Debian Unstable / Sid,

docker info systemweite Informationen zu finden.

Bilder werden bei /var/lib/docker/image/overlay2/imagedb/contentund gespeichert

Behälter werden bei gelagert /var/lib/docker/containers

Docker-Version 18.06.0-ce, API-Version1.38

Dhanuka
quelle
0

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

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 upich endlich /tmp/host-volumevon 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.

Axelrose
quelle
0

Bilder werden im /var/lib/dockerund dann im entsprechenden storage driverVerzeichnis gespeichert .

Der verwendete Speichertreiber kann durch Ausführen eines docker infoBefehls ermittelt werden .

anshul
quelle
0

Laut dem Docker-Handbuch " Erste Schritte " befindet sich "Ihr erstelltes Image" "in der lokalen Docker-Image-Registrierung Ihres Computers".

Geben Sie hier die Bildbeschreibung ein

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.

user3731622
quelle
Haha TBH Ich denke das ist höchstens ein Kommentar. Wäre aber ein toller Kommentar!
Mong H. Ng
0

Wenn jemand es für Skriptzwecke benötigt, ist hier eine einzeilige Lösung.

grepVersuchen 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/dockerim Modus "Linux-Container"
vulkanischer Rabe
quelle
Unter CentOS musste ich verwenden DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", aber am Ende ist es eine Datei, kein Verzeichnis
HairOfTheDog
Sind Sie sicher, dass es kein Verzeichnis ist? sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"Listen Sie für mich den Inhalt dieses Verzeichnisses auf.
Vulkanischer Rabe