Di mana gambar Docker disimpan di mesin host?

875

Saya berhasil menemukan wadah di bawah direktori /var/lib/docker/containers, tetapi saya tidak dapat menemukan gambar.

Apa direktori dan file di bawah /var/lib/docker?

nemo
sumber
2
Terbaik untuk menyatakan secara spesifik sistem operasi dalam judul pertanyaan dan / atau pernyataan pertanyaan dalam kasus tersebut. Dua jawaban bagus diberikan untuk linux dan macOS (Mac OS X).
Webel IT Australia - upvoter

Jawaban:

637

Isi /var/lib/dockerdirektori bervariasi tergantung pada driver yang digunakan Docker untuk penyimpanan .

Secara default ini akan aufstetapi dapat jatuh kembali ke overlay, overlay2, btrfs, devicemapperatau zfstergantung pada dukungan kernel Anda. Di sebagian besar tempat ini akan aufstetapi RedHats pergi dengandevicemapper .

Anda dapat secara manual mengatur driver penyimpanan dengan opsi -satau--storage-driver= ke daemon Docker .

  • /var/lib/docker/{driver-name} akan berisi penyimpanan khusus driver untuk konten gambar.
  • /var/lib/docker/graph/<id>sekarang hanya berisi metadata tentang gambar, di file jsondan layersize.

Dalam hal aufs:

  • /var/lib/docker/aufs/diff/<id> memiliki isi file gambar.
  • /var/lib/docker/repositories-aufsadalah file JSON yang berisi informasi gambar lokal. Ini dapat dilihat dengan perintah docker images.

Dalam hal devicemapper:

  • /var/lib/docker/devicemapper/devicemapper/data menyimpan gambar
  • /var/lib/docker/devicemapper/devicemapper/metadata metadata
  • Perhatikan bahwa file-file ini adalah file "jarang" yang disediakan tipis sehingga tidak sebesar yang terlihat.
Matt
sumber
1
Bisakah saya melihat konten di dalamnya, dengan cara memasangnya?
rv
1
Jika Anda mengatur driver penyimpanan setelah itu sudah berjalan dan memiliki beberapa wadah berjalan dengan gambar, apakah itu akan memigrasikan tanggal pada restart daemon berikutnya? Jika tidak maka bagaimana cara memodifikasi driver penyimpanan dalam hal ini?
BTR Naidu
7
Untuk MacOS, lihat jawaban di bawah ini
ProfNandaa
92
Bantulah diri Anda sendiri dan jangan "periksa default". Gunakan docker infodan temukan lokasi aktual khusus untuk pengaturan Anda .
Bruno Bronosky
5
Ini sepertinya telah berubah. Saya menggunakan Docker for Macdengan 2 gambar masing-masing 1,5 GB dan /var/libtidak memiliki direktori docker.
miguelmorinin
298

Saat menggunakan Docker untuk Aplikasi Mac, tampaknya wadah disimpan di dalam VM yang terletak di:

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

UPDATE (Atas perkenan mmorin ):

Pada 15 Januari 2019 tampaknya hanya ada file ini:

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

yang berisi Disk Docker dan semua gambar dan wadah di dalamnya.

mirosval
sumber
7
Apakah ini lokasi untuk semua gambar (seperti ubuntu, nginx), atau apakah ini lokasi untuk semua wadah? Pertanyaan aslinya meminta gambar , bukan wadah ...
Siu Ching Pong -Asuka Kenji-
2
Jika Anda ingat bahwa Docker masih berjalan di VM, jalur sistem relatif terhadap VM dan bukan dari sistem Mac Osx. Coba perintah ini: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root nad setelah ini: docker run --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker Anda tersedia untuk mendaftar folder buruh pelabuhan dari host WM
user1842947
3
Ini sepertinya telah berubah. Saya menggunakan Docker for Macdua gambar masing-masing 1,5 GB dan ~/Library/Containers/Data/com.docker.docker/Datatidak memiliki direktori com.docker.driver.amd64-linuxdan satu-satunya file besar vms/0/Docker.rawdengan 3,6 GB.
miguelmorinin
1
Apakah qcow2 atau mentah digunakan tergantung pada apakah Anda berada di MacOS High Sierra dengan APFS atau di bawah: docs.docker.com/docker-for-mac/faqs/#disk-usage
Peter
1
Periksa ukuran untuk mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Efren
122

ini adalah cara lama, sekarang telah berubah. Abaikan jawaban ini pada 2019

Dalam kasus khusus Mac OS X atau Windows, menggunakan boot2docker, gambar Docker Anda disimpan dalam VM VirtualBox yang dikelola oleh boot2docker.

VM ini akan disimpan di tempat normal gambar VirtualBox:

      OS X: ~/VirtualBox VMs/boot2docker-vm

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

Anda dapat meresetnya dengan menjalankan (PERINGATAN: Ini akan menghancurkan semua gambar yang Anda buat dan unduh sejauh ini):

boot2docker down
boot2docker destroy
boot2docker init
boot2docker up

Ini sangat berguna jika Anda menyimpan banyak gambar perantara saat membangun / men-debug bangunan tanpa opsi --rm yang berguna, saya kutip di sini untuk referensi: Gunakan:

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

dari pada:

docker build -t webapp .
Phil L.
sumber
16
Setelah menginstal Docker baru pada Windows 10, saya dapat mengkonfirmasi bahwa hasil dari mengklik shortcut Terminal Docker Quickstart untuk pertama kalinya menciptakan mesin virtual (VM) yang disebut 'default' (setelah beberapa awal yang gagal - terus jalankan sampai berhasil). VM 'default' ini dapat ditemukan di dalam Windows di: %USERPROFILE%\.docker\machine\machines (harap catat perhentian penuh di path)
AnotherLongUsername
6
Dalam rilis yang lebih baru, boot2docker sekarang menjadi mesin dok . Lihat docs.docker.com/machine/migrate-to-machine
khylo
3
Apakah mungkin mengubah lokasi itu?
dhblah
13
Jawabannya tidak lagi benar untuk Windows 10. Sebagai gantinya, lihat jawaban yang lebih baru dari @tristan yang merujukC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers
5
% USERPROFILE% \. Buruh pelabuhan masih benar untuk pengaturan win7.
RMorrisey
119

Sebenarnya, gambar Docker disimpan dalam dua file seperti yang ditunjukkan oleh perintah berikut

$ docker info

File data: /var/lib/docker/devicemapper/devicemapper/data

File metadata: /var/lib/docker/devicemapper/devicemapper/metadata

Marc Rechté
sumber
8
Ya, sayangnya, dua baris "(Meta) file data" ini tidak muncul di setiap buruh pelabuhan. Itu tergantung pada driver yang digunakan
Orabîg
@DmitryYudin mirosval menjawab berfungsi untuk Docker terbaru untuk Mac .
Franklin Yu
8
Jawaban yang tepat bukanlah "Di sinilah tempatnya di mesin MY." Jawaban yang tepat adalah "Ini adalah bagaimana Anda menemukannya di mesin ANDA." Ini jawaban yang tepat. Saya bergabung dengan perusahaan dengan 11 volume EBS berbeda yang penuh dengan gambar buruh pelabuhan. Jawaban ini memungkinkan saya untuk mencari tahu yang merupakan saat "Root Dir".
Bruno Bronosky
Pada Mac OS X (setidaknya pada Yosemite, yang merupakan EOL wrt Docker), docker infosangat berguna, tetapi output Docker Root Dir: /var/lib/dockertidak menunjukkan lokasi penyimpanan gambar (lihat jawaban spesifik Mac di atas).
Webel IT Australia - upvoter
70

Pada 'Docker untuk Windows' yang baru dirilis, yang menggunakan Hyper-V, data terletak di hard disk virtual Docker:

C: \ Users \ Public \ Documents \ Hyper-V \ Virtual hard disk \ MobyLinuxVM.vhdx

Anda juga dapat membuka 'Hyper-V Manager' untuk akses ke Docker / MobyLinuxVM.

Tristan
sumber
13
Docker pada Pembaruan Ulang Tahun Windows 10 menempatkan file gambar C:\ProgramData\docker\windowsfilteruntuk saya. Info lebih lanjut: stackoverflow.com/a/39971954/188740
Johnny Oshika
1
'Hyper-V Manager' adalah jawabannya!
Reza
68

Gambar disimpan di /var/lib/docker/graph/<id>/layer.

Perhatikan bahwa gambar hanya berbeda dari gambar induk. ID induk disimpan dengan metadata gambar /var/lib/docker/graph/<id>/json.

Saat Anda docker rungambar. AUFS akan 'menggabungkan' semua lapisan menjadi satu sistem file yang dapat digunakan.

creack
sumber
11
Jawaban ini sekarang kedaluwarsa, mereka telah memindahkan banyak hal.
Air
7
@ Air Bisakah Anda memposting apa yang sudah berpindah?
Elijah Lynn
1
tidak ada folder grafik lagi
Paddy
49

Di Ubuntu Anda dapat "bermain" dengan gambar yang sedang berjalan

sudo baobab /var/lib/docker

Sebenarnya, gambar disimpan di dalam /var/lib/docker/aufs/diff

tangkapan layar menunjukkan alat penganalisa disk baobab berjalan di / var / lib / docker

test30
sumber
Bagus dong. Pada Mac DaisyDisk serupa (tampilan roda), GrandPerspektif juga berguna (persegi panjang).
Webel IT Australia - upvoter
Tampaknya itu adalah satu-satunya cara yang dapat diandalkan untuk menemukannya.
Alexandr
48

Untuk seseorang yang menggunakan kotak alat Docker (yang menggunakan mesin docker), jawaban tentang boot2docker pada Mac OS X tidak valid. VM docker-machine disebut "default" dan ada di /Users/<username>/.docker/machine/machines/default/direktori.

mbbce
sumber
3
Saya tidak dapat menemukan wadah atau folder gambar di dalam direktori itu.
lvarayut
3
cari disk.vmdk di direktori itu
lukeaus
1
$ docker gambar -sebuah menghasilkan sekitar 1 gig gambar, sedangkan disk.vmdk di ~ / .docker sekitar 20 gigs. Bagaimana bisa?
Grav
Di mana itu disimpan di Windows?
Shreyas
@ Grav: Mesin virtual mengalokasikan 20 pertunjukan untuk penggunaan di masa depan, tetapi hanya menggunakan 1 pertunjukan untuk gambar.
primavera133
22

Di Docker untuk Windows ( Windows asli) penyimpanan kontainer default adalah di:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...
Tormod Haugene
sumber
Saya menjalankan docker buildperintah & saya tidak melihat file yang saya pikir adalah file gambar. Saya melihat beberapa folder dan beberapa file teks (mis. Service.txt). Apa jenis file & dengan ekstensi file apa yang docker builddibuat?
user3731622
22

Jika Anda menggunakan Docker untuk MAC (tidak boot2docker) maka lokasinya adalah/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/

Sunil Fernandes
sumber
Ya, ketika saya melakukan: 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.qcow2Saya menemukan gambar. Tapi itu bukan wadahnya. Jangan melihat mereka di direktori Data ini benar-benar ..
ulangan
1
Tetapi seperti yang dinyatakan sebelum Anda di sini stackoverflow.com/a/37642236/460885 di dalam gambar inilah wadah tersebut berada.
ulas
7

Seperti yang dijawab di sini , jika Anda menggunakan Mac, ia berada di

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Ricardo Martins
sumber
2
Docker.qcow2? Bagaimana saya bisa menarik gambar buruh pelabuhan tertentu dari itu?
AlxVallejo
7

Memperluas jawaban Tristan, di Windows dengan Hyper-V Anda dapat memindahkan gambar dengan langkah - langkah ini dari matthuisman:

Di Windows 10,

  1. Hentikan buruh pelabuhan, dll
  2. Ketik "Hyper-V Manager" di kotak pencarian bilah tugas dan jalankan.
  3. Pilih PC Anda di panel sebelah kiri (Milik saya disebut DESKTOP-CBP **)
  4. Klik kanan pada mesin virtual yang benar (Milik saya disebut MobyLinuxVM)
  5. Pilih "Matikan" (Jika sedang berjalan)
  6. Klik kanan lagi dan pilih "Pindahkan"
  7. Ikuti petunjuknya
boni
sumber
2
Ini hanya memindahkan mesin Hyper-V bukan gambar, gambar akan tetap disimpan di mana lokasi VHD berada.
olive_tree
@olive_tree Saya mencoba mencari gambar yang dibuat dengan docker buildperintah. Saya menggunakan komputer Windows 10. Saya mencari di C: \ Users \ Public \ Documents \ Hyper-V \ Virtual hard disk, tetapi yang saya lihat adalah MobyLinuxVM.vhdx. Di mana gambar sebenarnya disimpan?
user3731622
5

Jika Anda ingat bahwa Docker masih berjalan di VM, jalur sistem relatif terhadap VM dan bukan dari sistem Mac Osx. Seperti dikatakan semua terkandung dalam file VM:

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

Cobalah untuk menjalankan gambar Alpine dengan opsi volume ini dan perintah ls Anda dapat membuat daftar host VM:

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

Setelah ini coba saja:

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

Sekarang, Anda dapat mendaftar folder buruh pelabuhan dari host VM

pengguna1842947
sumber
Terima kasih! Ini adalah satu-satunya jawaban yang bekerja untuk saya di Windows 10 dengan Hyper-v. Saya dapat membersihkan file yang rusak di bawah folder sulit dipahami / var / lib / docker / overlay2.
Ali Cheaito
4

Saya menggunakan boot2docker untuk Docker di Mac OSX, jadi gambar disimpan ke dalam /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.

Chu-Siang Lai
sumber
4

Saya bisa menjawab pertanyaan ini hanya untuk pengguna Ubuntu:

Direktori root dari buruh pelabuhan dapat ditemukan ketika Anda menjalankan perintah docker info

Direktori Docker akan diberikan di baris ini: " Docker Root Dir: /var/lib/docker"

Tentang gambar buruh pelabuhan, mereka disimpan di dalam direktori buruh pelabuhan: /var/lib/docker/aufs/diff/

Ingat hal-hal ini tidak sama di semua versi buruh pelabuhan. Saat ini, saya menggunakan 1.12.3.

Arif A.
sumber
4

Gunakan docker infoperintah untuk menampilkan informasi seluruh sistem dan lokasi dapat bervariasi.

Bergantung pada driver penyimpanan yang digunakan, informasi tambahan dapat ditampilkan, seperti nama kumpulan, file data, file metadata, ruang data yang digunakan, total ruang data, ruang metadata yang digunakan, dan total ruang metadata.

File data adalah tempat gambar disimpan dan file metadata adalah tempat data meta mengenai gambar tersebut disimpan. Saat dijalankan untuk pertama kalinya Docker mengalokasikan sejumlah ruang data dan ruang data meta dari ruang yang tersedia di volume tempat /var/lib/dockerterpasang.

Ini adalah contoh di Ubuntu (lihat 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
...

Dan inilah contohnya pada Travis CI (lihat Docker Root Dir ):

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

Anda dapat menggunakan --formatparameter untuk mengekstrak informasi itu ke dalam satu file, misalnya

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

atau:

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

Di Docker untuk Windows, log ada di sini: %USERPROFILE%\AppData\Local\Docker

omasoud
sumber
3

periksa folder buruh pelabuhan di /var/lib

gambar disimpan di lokasi di bawah ini:

/var/lib/docker/image/overlay2/imagedb/content
Chandra Pal
sumber
4
ini hanya memiliki folder sha256
toto '
Saya pikir Anda bermaksud untuk hanya: /var/lib/docker/image/overlay2/. Juga perhatikan bahwa ini adalah kasus karena fakta bahwa mesin Docker Anda gunakan overlay2sebagai Driver Penyimpanan.
Guy Avraham
3

gunakan docker inspect container_id
folder temukan di bawah MergedDir

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 
madjardi
sumber
3

Untuk "Docker Desktop", klik ikon tray system docker dan klik "Pengaturan". masukkan deskripsi gambar di sini

Pada tab Lanjut, Anda dapat melihat lokasi gambar disk.

masukkan deskripsi gambar di sini

Nishān Wickramrathna
sumber
2

Lingkungan: Windows 10 Pro, docker desktop 2.0.3.0 edge

klik kanan ikon buruh pelabuhan di baki sistem, pilih pengaturan - lanjutan:

Lokasi gambar disk (dapat diedit melalui browser):

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

(ada di sana - Direktori dokumen disembunyikan)

theRiley
sumber
Apakah C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disk \ DockerDesktop.vhdx gambar dibuat oleh docker buildperintah?
user3731622
2
sudo docker info | grep -e "Root Dir"
Mꜳltus
sumber
1

Di Fedora, Docker menggunakan LVM untuk penyimpanan jika tersedia. Pada sistem saya docker infomenunjukkan:

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

Dalam hal ini, untuk meningkatkan penyimpanan, Anda harus menggunakan alat baris perintah LVM atau manajer partisi yang kompatibel seperti blivet .

eddygeek
sumber
1

Di Windows 2016, buruh pelabuhan (DockerMsftProvider) menggunakan folder "windowsfilter" di bawah akar buruh pelabuhan

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

Ia menggunakan folder "tmp" di bawah docker root untuk mengunduh file dan menghapus file setelah mengekstrak file yang diunduh ke folder "windowsfilter".

shanmuga raja
sumber
0

Pada Debian Unstable / Sid,

docker info untuk menemukan informasi seluruh sistem.

gambar disimpan di /var/lib/docker/image/overlay2/imagedb/contentdan

wadah disimpan di /var/lib/docker/containers

versi buruh pelabuhan 18.06.0-ce, versi API1.38

Dhanuka
sumber
0

Saya tidak dapat menyelesaikan pertanyaan dengan Docker versi 18.09 di Macos menggunakan jawaban di atas dan mencoba lagi.

Satu-satunya solusi aktual bagi saya adalah menggunakan docker-compose.ymlkonfigurasi ini :

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

Setelah diluncurkan dengan docker-compose upsaya akhirnya memiliki /tmp/host-volumedari makro dibagi sebagai volume yang dapat ditulisi dari dalam wadah:

> 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

Semoga ini bisa membantu orang lain juga.

axelrose
sumber
0

Gambar disimpan di dalam /var/lib/dockerdan kemudian di bawah storage driverdirektori yang berlaku .

Driver penyimpanan, yang digunakan, dapat ditentukan dengan menjalankan docker infoperintah.

anshul
sumber
0

Menurut panduan Memulai Docker, "gambar buatan Anda" adalah "di registri gambar Docker lokal mesin Anda."

masukkan deskripsi gambar di sini

Ini masih aneh bagi saya, karena sekarang mengarah ke pertanyaan. Di mana registry gambar Docker lokal mesin saya?

Namun demikian, saya pasti berpikir info ini layak untuk dibagikan sebagai jawaban.

pengguna3731622
sumber
Haha TBH Saya pikir ini paling banyak komentar. Akan menjadi komentar yang bagus!
Mong H. Ng
0

Jika ada yang membutuhkannya untuk tujuan penulisan skrip, berikut ini adalah solusi satu baris.

Di shell POSIX, dengan PCRE diaktifkan grep, coba:

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

Di PowerShell:

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

Catatan, ketika pada Windows 10 (pada 10.0.18999.1), dalam konfigurasi default, ia mengembalikan:

  • C:\ProgramData\Docker dalam mode "Windows container"
  • /var/lib/docker, dalam mode "Linux container"
gagak vulcan
sumber
Pada CentOS saya harus menggunakan DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", tetapi pada akhirnya itu adalah file, bukan direktori
HairOfTheDog
Apakah Anda yakin itu bukan direktori? Bagi saya, sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"daftarkan isi direktori ini.
gagak vulcan