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
?
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
?
Jawaban:
Isi /var/lib/docker
direktori bervariasi tergantung pada driver yang digunakan Docker untuk penyimpanan .
Secara default ini akan aufs
tetapi dapat jatuh kembali ke overlay
, overlay2
, btrfs
, devicemapper
atau zfs
tergantung pada dukungan kernel Anda. Di sebagian besar tempat ini akan aufs
tetapi RedHats pergi dengandevicemapper
.
Anda dapat secara manual mengatur driver penyimpanan dengan opsi -s
atau--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 json
dan layersize
.Dalam hal aufs
:
/var/lib/docker/aufs/diff/<id>
memiliki isi file gambar./var/lib/docker/repositories-aufs
adalah 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
metadatadocker info
dan temukan lokasi aktual khusus untuk pengaturan Anda .
Docker for Mac
dengan 2 gambar masing-masing 1,5 GB dan /var/lib
tidak memiliki direktori docker
.
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.
ubuntu
, nginx
), atau apakah ini lokasi untuk semua wadah? Pertanyaan aslinya meminta gambar , bukan wadah ...
Docker for Mac
dua gambar masing-masing 1,5 GB dan ~/Library/Containers/Data/com.docker.docker/Data
tidak memiliki direktori com.docker.driver.amd64-linux
dan satu-satunya file besar vms/0/Docker.raw
dengan 3,6 GB.
du -hd1 ~/Library/Containers/com.docker.docker/Data/
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 .
%USERPROFILE%\.docker\machine\machines
(harap catat perhentian penuh di path)
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
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
docker info
sangat berguna, tetapi output Docker Root Dir: /var/lib/docker
tidak menunjukkan lokasi penyimpanan gambar (lihat jawaban spesifik Mac di atas).
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.
C:\ProgramData\docker\windowsfilter
untuk saya. Info lebih lanjut: stackoverflow.com/a/39971954/188740
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 run
gambar. AUFS akan 'menggabungkan' semua lapisan menjadi satu sistem file yang dapat digunakan.
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
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.
Di Docker untuk Windows ( Windows asli) penyimpanan kontainer default adalah di:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
docker build
perintah & 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 build
dibuat?
Jika Anda menggunakan Docker untuk MAC (tidak boot2docker
) maka lokasinya adalah/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
Saya menemukan gambar. Tapi itu bukan wadahnya. Jangan melihat mereka di direktori Data ini benar-benar ..
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
Memperluas jawaban Tristan, di Windows dengan Hyper-V Anda dapat memindahkan gambar dengan langkah - langkah ini dari matthuisman:
Di Windows 10,
- Hentikan buruh pelabuhan, dll
- Ketik "Hyper-V Manager" di kotak pencarian bilah tugas dan jalankan.
- Pilih PC Anda di panel sebelah kiri (Milik saya disebut DESKTOP-CBP **)
- Klik kanan pada mesin virtual yang benar (Milik saya disebut MobyLinuxVM)
- Pilih "Matikan" (Jika sedang berjalan)
- Klik kanan lagi dan pilih "Pindahkan"
- Ikuti petunjuknya
docker build
perintah. 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?
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
Saya menggunakan boot2docker untuk Docker di Mac OSX, jadi gambar disimpan ke dalam /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk
.
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.
Gunakan docker info
perintah 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/docker
terpasang.
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 --format
parameter 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"]]
periksa folder buruh pelabuhan di /var/lib
gambar disimpan di lokasi di bawah ini:
/var/lib/docker/image/overlay2/imagedb/content
/var/lib/docker/image/overlay2/
. Juga perhatikan bahwa ini adalah kasus karena fakta bahwa mesin Docker Anda gunakan overlay2
sebagai Driver Penyimpanan.
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)
docker build
perintah?
Di Fedora, Docker menggunakan LVM untuk penyimpanan jika tersedia. Pada sistem saya docker info
menunjukkan:
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 .
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".
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.yml
konfigurasi 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 up
saya akhirnya memiliki /tmp/host-volume
dari 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.
Menurut panduan Memulai Docker, "gambar buatan Anda" adalah "di registri gambar Docker lokal mesin Anda."
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.
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"DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')"
, tetapi pada akhirnya itu adalah file, bukan direktori
sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"
daftarkan isi direktori ini.