Saya melakukan docker pull dan dapat membuat daftar gambar yang diunduh. Saya ingin melihat isi gambar ini. Melakukan pencarian di internet tetapi tidak ada jawaban langsung.
Bukan korban penipuan. Melihat wadah dan gambar bukan hal yang sama. Anda mungkin ingin melihat sistem file awal atau bahkan memvalidasi bahwa tidak ada yang berbahaya di dalam gambar sebelum mendapat kesempatan untuk dijalankan.
Keilaron
4
jika Anda tidak dapat menjalankan gambar sebagai wadah, Anda dapat menggunakan alat seperti drive ( github.com/wagoodman/dive ) atau Anda dapat menggunakan buruh pelabuhan untuk mengekspor gambar sebagai file tar. Kemudian Anda dapat menjelajahi tar atau dengan menyelam Anda dapat menjelajahi gambar.
Terima kasih. Yang pertama adalah apa yang saya cari. Jelajahi folder pada dasarnya.
pylearn
9
Saya mencoba melihat konten gambar yang dibuat menggunakan "DARI awal" dan tidak ada shell yang tersedia. Apakah ada cara lain untuk melihat isinya? Gambar yang saya coba lihat adalah portainer / portainer.
Juan Hernandez
2
Mungkinkah seseorang melihat isi gambar tanpa memunculkan wadah? Atau dapatkah kita berasumsi bahwa itu aman dari semua kecuali mereka memiliki hak untuk menelurkan sebuah wadah dari itu?
Shabirmean
3
menggabungkan apa yang diceritakan sebelumnya "untuk wadah windows dengan entrypoint": docker run -it --entrypoint cmd <image_name>akan berfungsi.
Jawaban yang diterima di sini bermasalah, karena tidak ada jaminan bahwa suatu gambar akan memiliki sejenis shell interaktif. Misalnya, gambar drone / drone berisi pada satu perintah /drone, dan ia memiliki ENTRYPOINTjuga, jadi ini akan gagal:
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Dan ini akan gagal:
$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".
Ini bukan konfigurasi yang tidak biasa; banyak gambar minimal hanya berisi binari yang diperlukan untuk mendukung layanan target. Untungnya, ada mekanisme untuk mengeksplorasi sistem file gambar yang tidak bergantung pada konten gambar. Yang paling mudah mungkin adalah docker exportperintah, yang akan mengekspor sistem file kontainer sebagai arsip tar. Jadi, mulailah sebuah wadah (tidak masalah jika gagal atau tidak):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Kemudian gunakan docker exportuntuk mengekspor sistem file ke tar:
$ docker export $(docker ps -lq) | tar tf -
Di docker ps -lqsana berarti "beri saya id wadah buruh pelabuhan terbaru". Anda bisa menggantinya dengan nama atau id wadah eksplisit.
jawaban ini sangat membantu untuk mengetahui apa yang mungkin ada di dalam wadah pada waktu tertentu
João Andrade
2
Jawaban ini lebih tepat dan berfungsi untuk saya, karena saya ingin menjelajahi konten gambar dengan arsitektur asing dan saya tidak bisa "jalankan" saja
Vladimir Perevalov
94
Anda tidak harus memulai wadah hanya untuk melihat konten gambar. Misalnya, Anda mungkin ingin mencari konten berbahaya, bukan menjalankannya. Gunakan "buat" bukan "jalankan";
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
Baris ke-2 di atas hanya mencantumkan konten sistem file. Jika Anda ingin mendapatkan semua file sebagai tar, Anda dapat menggantinya dengan sesuatu seperti docker export tmp_$$ > image-fs.tar.
Pino
Apa yang akan menjadi baris ke-2 untuk OS Windows? Itu docker export tmp_$$ | tar ttidak akan bekerja.
Alexei Marinichenko
@Alexei Marinichenko tarmungkin tidak diinstal pada mesin Anda. Cobalah tar --helpuntuk memeriksanya.
Abdurrahman I.
1
Ini juga berfungsi jika tidak ada cangkang di dalam wadah
Peter Dotchev
3
@AlexeiMarinichenko Anda dapat menggunakan -oparameter untuk menentukan file untuk menulis. Misalnya docker export -o c:\temp\tmp_$$.tar tmp_$$.
GiddyUpHorsey
62
docker save nginx > nginx.tar
tar -xvf nginx.tar
File-file berikut ada:
manifest.json - Menjelaskan lapisan sistem file dan nama file json yang memiliki properti Container.
.json - Properti kontainer
- Setiap direktori "layerid" berisi file json yang menggambarkan properti layer dan sistem file yang terkait dengan layer itu. Docker menyimpan gambar Container sebagai lapisan untuk mengoptimalkan ruang penyimpanan dengan menggunakan kembali lapisan di seluruh gambar.
Ini sepertinya jawaban yang paling berguna bagi saya, karena Anda tidak harus memulai sebuah wadah untuk mendapatkan file.
Alec Thomas
1
Sepenuhnya menyetujui @AlecThomas - dan untuk melangkah lebih jauh, mengapa saya bahkan dockerhanya perlu melihat isi dari apa, pada dasarnya, hanya jenis file arsip yang berbeda.
Ed Randall
jawaban yang baik, saya juga akan menentukan tag:, docker save --output nginx.tar nginx:latestjika tidak, menurut doc, itu akan berisi "semua lapisan induk, dan semua tag + versi"
Tarek
Ini harus dibatalkan karena ini mungkin satu-satunya cara untuk menjelajahi internal jika Anda tidak memiliki utilitas Unix di dalamnya. Juga cara ini tidak memerlukan pembuatan wadah.
Stanislav German-Evtushenko
9
Untuk membuat daftar konten terperinci dari suatu gambar Anda harus menjalankan di docker run --rm image/name ls -alRmana --rmberarti menghapus segera setelah keluar dari sebuah wadah.
Masalah dengan jawaban ini adalah bahwa, seperti yang dibahas dalam jawaban yang diterima, tidak ada jaminan bahwa gambar Anda memiliki setiap shell di dalamnya. Atau ls. Atau benar-benar ada alat umum sama sekali.
larsks
4
Kita dapat mencoba yang lebih sederhana sebagai berikut:
Ini tidak menunjukkan isinya ; itu hanya menunjukkan lapisan, dll., yang masuk ke membangun gambar.
Roger Lipscombe
0
Dengan Docker EE untuk Windows (17.06.2-ee-6 di Hyper-V Server 2016) semua konten Windows Containers dapat diperiksa di C:\ProgramData\docker\windowsfilter\ jalur OS host.
Tidak diperlukan pemasangan khusus.
Awalan folder dapat ditemukan oleh id wadah dari docker ps -akeluaran.
Ada alat open source gratis yang disebut Anchore yang dapat Anda gunakan untuk memindai gambar kontainer. Perintah ini akan memungkinkan Anda untuk membuat daftar semua file dalam gambar wadah
konten gambar anchore-cli myrepo / app: file terbaru
Jawaban:
Anda bisa menjalankan wadah shell interaktif menggunakan gambar itu dan menjelajahi konten apa pun yang dimiliki gambar itu.
Misalnya:
Atau mengikuti untuk gambar dengan
entrypoint
Atau, jika Anda ingin melihat bagaimana gambar itu dibuat, artinya langkah-langkahnya
Dockerfile
, Anda bisa:Langkah-langkahnya akan masuk ke
image_history
file.sumber
docker run -it --entrypoint cmd <image_name>
akan berfungsi.Jawaban yang diterima di sini bermasalah, karena tidak ada jaminan bahwa suatu gambar akan memiliki sejenis shell interaktif. Misalnya, gambar drone / drone berisi pada satu perintah
/drone
, dan ia memilikiENTRYPOINT
juga, jadi ini akan gagal:Dan ini akan gagal:
Ini bukan konfigurasi yang tidak biasa; banyak gambar minimal hanya berisi binari yang diperlukan untuk mendukung layanan target. Untungnya, ada mekanisme untuk mengeksplorasi sistem file gambar yang tidak bergantung pada konten gambar. Yang paling mudah mungkin adalah
docker export
perintah, yang akan mengekspor sistem file kontainer sebagai arsip tar. Jadi, mulailah sebuah wadah (tidak masalah jika gagal atau tidak):Kemudian gunakan
docker export
untuk mengekspor sistem file ketar
:Di
docker ps -lq
sana berarti "beri saya id wadah buruh pelabuhan terbaru". Anda bisa menggantinya dengan nama atau id wadah eksplisit.sumber
Anda tidak harus memulai wadah hanya untuk melihat konten gambar. Misalnya, Anda mungkin ingin mencari konten berbahaya, bukan menjalankannya. Gunakan "buat" bukan "jalankan";
sumber
docker export tmp_$$ > image-fs.tar
.docker export tmp_$$ | tar t
tidak akan bekerja.tar
mungkin tidak diinstal pada mesin Anda. Cobalahtar --help
untuk memeriksanya.-o
parameter untuk menentukan file untuk menulis. Misalnyadocker export -o c:\temp\tmp_$$.tar tmp_$$
.File-file berikut ada:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
ATAU
Anda dapat menggunakan dive untuk melihat konten gambar secara interaktif dengan TUI
https://github.com/wagoodman/dive
sumber
docker
hanya perlu melihat isi dari apa, pada dasarnya, hanya jenis file arsip yang berbeda.docker save --output nginx.tar nginx:latest
jika tidak, menurut doc, itu akan berisi "semua lapisan induk, dan semua tag + versi"Untuk membuat daftar konten terperinci dari suatu gambar Anda harus menjalankan di
docker run --rm image/name ls -alR
mana--rm
berarti menghapus segera setelah keluar dari sebuah wadah.sumber
ls
tersedia dan dalamPATH
MENJELAJAHI GAMBAR DOCKER !
Mencari tahu apa jenis shell yang di sana
bash
ataush
atau ...Periksa gambar terlebih dahulu:
docker inspect name-of-container-or-image
Mencari
entrypoint
ataucmd
mengembalikan json.Kemudian lakukan:
docker run --rm -it --entrypoint=/bin/bash name-of-image
sekali di dalam do:
ls -lsa
atau perintah shell lainnya seperti:cd ..
The
-it
singkatan interaktif ... dan tty. yang--rm
singkatan kontainer menghapus setelah menjalankan.sumber
ls
. Atau benar-benar ada alat umum sama sekali.Kita dapat mencoba yang lebih sederhana sebagai berikut:
Ini berfungsi dalam versi Docker:
sumber
Dengan Docker EE untuk Windows (17.06.2-ee-6 di Hyper-V Server 2016) semua konten Windows Containers dapat diperiksa di
C:\ProgramData\docker\windowsfilter\
jalur OS host.Tidak diperlukan pemasangan khusus.
Awalan folder dapat ditemukan oleh id wadah dari
docker ps -a
keluaran.sumber
Ada alat open source gratis yang disebut Anchore yang dapat Anda gunakan untuk memindai gambar kontainer. Perintah ini akan memungkinkan Anda untuk membuat daftar semua file dalam gambar wadah
konten gambar anchore-cli myrepo / app: file terbaru
https://anchore.com/opensource/
sumber