Saya ingin dapat memeriksa isi wadah Docker (hanya baca). Cara yang elegan untuk melakukan ini adalah dengan me-mount konten kontainer dalam direktori. Saya berbicara tentang pemasangan konten kontainer pada host, bukan tentang pemasangan folder pada host di dalam wadah.
Saya dapat melihat bahwa ada dua driver penyimpanan di Docker sekarang: aufs dan btrfs. Instalasi Docker saya sendiri menggunakan btrfs, dan menjelajah ke / var / lib / docker / btrfs / subvolume menunjukkan kepada saya satu direktori per wadah Docker pada sistem. Namun ini adalah detail implementasi Docker dan rasanya salah untuk me - mount direktori ini di tempat lain.
Apakah ada cara yang tepat untuk melakukan ini, atau apakah saya perlu menambal Docker untuk mendukung jenis mount ini?
sumber
Jawaban:
Lihatlah
docker export
.Untuk dengan cepat daftar file dalam wadah Anda:
Untuk mengekspor:
Atau untuk melihat file:
Docker 1.8 mendukung cp :
https://docs.docker.com/reference/commandline/cp/
pembaruan: Anda harus ssh ke mesin buruh pelabuhan saat menjalankan ini.
sumber
tar x PATH-IN-CONTAINER
, itu hanya akan mengekstrak file yang Anda butuhkan.tar
arsip masih dibuat di daemon Docker, dan dibutuhkan beberapa menit untuk membuat ...docker export ubuntu|tar -t|grep etc/network
membutuhkan waktu 3 detik untuk saya.ubuntu
gambarnya sangat kecil ...Anda dapat menggunakan docker commit untuk mempertahankan kondisi wadah Anda saat ini di gambar baru, dan memulai wadah interaktif dari gambar ini untuk memeriksa isinya.
Dari dokumentasi:
Semoga ini membantu.
sumber
Anda dapat menggunakan nsenter untuk menjalankan program inspeksi Anda (yang mungkin harus sudah termasuk dalam wadah) di dalam wadah / namespace. Tetapi untuk me-mount sistem file kontainer seperti yang terlihat di dalamnya Anda harus me-mount gambar asli dan semua layer jika aufs, atau tindakan setara untuk mapper perangkat, btrfs dan mesin penyimpanan lain (masa depan) yang digunakan, berbeda dalam setiap kasus. Mungkin akan lebih efisien untuk membiarkan buruh pelabuhan melakukan pekerjaan untuk Anda, persis seperti yang seharusnya dilakukan, dan menggunakan nsenter untuk melakukan pemeriksaan di dalam wadah.
Ada beberapa pendekatan lain. diff buruh pelabuhan akan menunjukkan file apa yang berubah dalam wadah itu, jika Anda ingin melihat apa yang berubah dan bukan apa yang ada di gambar asli.
Dan untuk data yang harus gigih dan dapat diperiksa, mungkin pola yang lebih baik adalah memilikinya dalam volume dalam wadah, dan membuatnya dipasang pada sistem file nyata, atau dalam wadah data murni, atau dalam wadah yang sama, tetapi Anda dapat meluncurkan wadah lain dengan program inspeksi yang memasang volume-volume itu darinya.
sumber
EDIT: Saya mencoba solusi di bawah ini dan sayangnya itu tidak berhasil untuk saya dalam praktek. Filesystem yang di-mount tidak secara akurat mencerminkan filesystem kontainer (bahkan dengan
cache=no
). Saya tidak yakin apakah ini masalah mendasar atau saya melakukan sesuatu yang salah.Anda dapat menginstal sshd pada gambar buruh pelabuhan dan menggunakan
docker exec
untuk menjalankan layanan ssh (/usr/sbin/sshd -D
) pada wadah buruh pelabuhan (perhatikan bahwa port SSH 22 dari wadah buruh pelabuhan perlu dibuka).Kemudian, gunakan
docker cp
untuk menyalin kunci ssh publik Anda ke/root/.ssh/authorized_keys
direktori wadah buruh pelabuhan.Terakhir, gunakan
docker inspect
untuk menemukan alamat IP wadah dan pasang sistem file wadah menggunakanAnda harus menulis naskah untuk membuatnya bekerja dengan nyaman dalam praktik.
sumber