Saat menggunakan gambar buruh pelabuhan dari pendaftar, saya sering perlu melihat volume yang dibuat oleh wadah gambar.
Catatan: Saya menggunakan buruh pelabuhan versi 1.3.2 di Red Hat 7.
Contoh
Gambar postgres
resmi dari Docker Registry memiliki volume yang dikonfigurasi untuk kontainer di /var/lib/postgresql/data
.
Apa perintah yang paling ringkas untuk menunjukkan volume /var/lib/postgresql/data
dalam sebuah postgres
wadah?
Jawaban:
Gunakan
docker ps
untuk mendapatkan id kontainer.Kemudian
docker inspect -f '{{ .Mounts }}' containerid
Contoh:
terminal 1
terminal 2
Hasil
rupanya karena penggunaan bahasa Go untuk mengimplementasikan alat perintah buruh pelabuhan.
The
docker inspect
perintah tanpa-f format
cukup verbose. Karena JSON, Anda dapat menyalurkannya ke python atau nodejs dan mengekstrak apa pun yang Anda butuhkan.docker history <image name>
akan menampilkan layer yang dipanggang menjadi gambar. Sayangnya,docker history
sepertinya terpincang-pincang oleh pemformatannya dan kurangnya pilihan untuk memilih apa yang ditampilkan.Anda dapat memilih format singkat dan verbose, melalui flag --no-trunc.
Berikut ini contoh verbose.
sumber
Dengan docker 1.10, Anda sekarang memiliki perintah baru untuk kontainer volume data.
(untuk kontainer reguler, lihat bagian selanjutnya, untuk buruh pelabuhan 1.8+):
docker volume ls
docker volume inspect
Dengan buruh pelabuhan 1.8.1 (Agustus 2015), a
docker inspect -f '{{ .Volumes }}' containerid
akan kosong!Anda sekarang perlu memeriksa
Mounts
, yang merupakan daftar jalur yang dipasang seperti:Jika Anda ingin jalur mount pertama (misalnya), itu akan menjadi (menggunakan indeks 0):
Seperti komentar Mike Mitterer di bawah ini :
Atau, seperti yang dikomentari oleh Mitja , gunakan
jq
perintah .sumber
jq
paket di bawah ubuntu, dan kemudian pipa ke sana:docker inspect -f '{{ json .Mounts }}' containerid | jq
Tampilkan nama dan tujuan titik volume volume yang digunakan oleh wadah:
Ini kompatibel dengan Docker 1.13.
sumber
Saya benar-benar googled ini, dan menemukan jawaban saya sendiri :) Ingatan saya hari ini ... Dan bagi mereka yang tidak tahu tentang hal itu commandlinefu adalah tempat yang bagus untuk menemukan dan mempublikasikan potongan-potongan ini.
Daftar volume buruh pelabuhan dengan wadah.
Contoh output.
sumber
Anda bisa mendapatkan informasi tentang volume mana yang secara khusus dimasukkan ke dalam wadah dengan memeriksa wadah dan melihat output JSON dan membandingkan beberapa bidang. Ketika Anda menjalankan
docker inspect myContainer
, bidangVolumes
danVolumesRW
memberi Anda informasi tentang SEMUA volume yang dipasang di dalam wadah, termasuk volume yang dipasang di Dockerfile denganVOLUME
direktif, dan pada baris perintah dengandocker run -v
perintah. Namun, Anda dapat mengisolasi volume mana yang dipasang di wadah menggunakandocker run -v
perintah dengan memeriksaHostConfig.Binds
bidang didocker inspect
output JSON. Untuk memperjelas, opsi ini . Jadi, jika Anda rujuk silang bidang ini denganHostConfig.Binds
bidang memberi tahu Anda volume mana yang dipasang secara khusus dalamdocker run
perintah Anda dengan-v
Volumes
bidang, Anda akan dapat menentukan volume yang dipanggang ke dalam wadah menggunakanVOLUME
arahan di Dockerfile.Grep dapat mencapai ini seperti:
Dan...
Dan dalam contoh saya, Anda dapat melihat saya telah memasang
/var/docker/docker-registry/config
ke wadah/registry
menggunakan-v
opsi dalamdocker run
perintah saya , dan saya telah memasang/data
dan/config
volume menggunakanVOLUME
arahan di Dockerfile saya. Wadah tidak perlu berjalan untuk mendapatkan informasi ini, tetapi wadah tersebut harus dijalankan setidaknya satu kali untuk mengisiHostConfig
output JSON daridocker inspect
perintah Anda .sumber
HostConfig.Binds
dan bagaimana perbedaannya dari yang.Volumes
terlihat dalam jawaban dari @Paul?.Volumes
daftar "pemetaan objek jalur titik mount (string) di dalam wadah ke objek kosong", danHostConfig.Binds
menjelaskan ikatan aktual Volume -mounted dalam wadah. Bagi saya, itulah yangHostConfig.Binds
ingin Anda baca, lawan.Volumes
, meskipun saya ingin mendengar alasan yang lebih baik.#docker
Freenode (saluran utama untuk buruh pelabuhan), dan jika saya mendengar sesuatu kembali, saya pasti akan memperbarui di sini dengan informasi lebih lanjut. Ini pertanyaan yang sangat bagus yang pernah Anda tanyakan di sini tentang perbedaannya. Terima kasih!HostConfig.Binds
hanya diisi ketika jalur host volume ditentukan? Misalnya,docker run -d -v /docker-test:/docker-test postgres
vsdocker run -d -v /docker-test postgres
. Tampaknya buruh pelabuhan menangani dua volume kasus ini sangat berbeda karena beberapa alasan.Untuk Docker 1.8, saya menggunakan:
sumber
jika Anda ingin mencantumkan semua nama wadah dengan volume yang relevan yang dilampirkan pada setiap wadah Anda dapat mencoba ini:
contoh output:
/ opt_rundeck_1 - nama wadah
[..] - volume terlampir pada conatiner
sumber
Berikut ini adalah satu perintah baris untuk mendapatkan informasi volume untuk menjalankan kontainer:
Output adalah:
Versi buruh pelabuhan:
sumber
Variasi yang berguna untuk pengguna yang menyusun buruh pelabuhan:
Ini akan dengan sangat rapi menampilkan informasi volume yang dapat diuraikan. Contoh dari komposer wordpress docker saya:
Output berisi satu baris untuk setiap kontainer, daftar volume (dan poin pemasangan) yang digunakan. Alter yang {{NAMA}}: {{}} .Destination untuk menampilkan informasi yang Anda inginkan.
Jika Anda hanya ingin daftar volume yang sederhana, satu volume per baris
Bagus untuk menghasilkan daftar volume untuk dicadangkan. Saya menggunakan teknik ini bersama dengan Blacklabelops Volumerize untuk mencadangkan semua volume yang digunakan oleh semua wadah dalam komposisi buruh pelabuhan. Dokumen untuk Volumerize tidak menyebutkannya, tetapi Anda tidak perlu menggunakannya dalam wadah yang persisten atau menggunakan fasilitas bawaan untuk memulai dan menghentikan layanan. Saya lebih suka meninggalkan operasi penting seperti cadangan dan kontrol layanan kepada pengguna yang sebenarnya (di luar buruh pelabuhan). Cadangan saya dipicu oleh akun pengguna (non-buruh pelabuhan) yang sebenarnya, dan menggunakan stop-compose docker untuk menghentikan layanan, mencadangkan semua volume yang digunakan, dan akhirnya pembuat docker mulai memulai kembali.
sumber
sumber
Ini adalah versi saya untuk menemukan titik mount dari komposisi buruh pelabuhan. Dalam menggunakannya untuk membuat cadangan volume.
Ini adalah kombinasi dari solusi sebelumnya.
sumber
Jika Anda menggunakan pwsh (powershell core), Anda dapat mencoba
Anda juga dapat melihat nama kontainer dan Mounts seperti di bawah ini
Karena output dikonversi sebagai json, Anda bisa mendapatkan properti apa pun yang dimilikinya.
sumber
Kita dapat melakukannya tanpa sintaks templat -f Go:
Operasi jq pertama mengupas pembungkus
jq .[]
objek{}
.Operasi jq kedua akan mengembalikan semua item Mount.
sumber