Cara melihat konten gambar buruh pelabuhan

291

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.

pylearn
sumber
2
Kemungkinan duplikat sistem file Penjelajah Docker
Vadzim
10
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.
FunThomas424242
Bukan penipuan tetapi Anda dapat menemukan jawabannya di sini: stackoverflow.com/a/40324326/5641227
Khalil Gharbaoui

Jawaban:

372

Anda bisa menjalankan wadah shell interaktif menggunakan gambar itu dan menjelajahi konten apa pun yang dimiliki gambar itu.

Misalnya:

docker run -it image_name sh

Atau mengikuti untuk gambar dengan entrypoint

docker run -it --entrypoint sh image_name

Atau, jika Anda ingin melihat bagaimana gambar itu dibuat, artinya langkah-langkahnya Dockerfile, Anda bisa:

docker image history --no-trunc image_name > image_history

Langkah-langkahnya akan masuk ke image_historyfile.

Ayman Nedjmeddine
sumber
1
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.
Beytan Kurt
2
@JuanHernandez, ya, Anda dapat membuang seluruh isi gambar seperti yang ditunjukkan di stackoverflow.com/a/42677219/320594 .
Jaime Hablutzel
197

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.

larsks
sumber
5
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_$$
lgekman
sumber
11
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.

https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/

ATAU

Anda dapat menggunakan dive untuk melihat konten gambar secara interaktif dengan TUI

masukkan deskripsi gambar di sini

https://github.com/wagoodman/dive

Andy Wong
sumber
5
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.

masukkan deskripsi gambar di sini

Serge Voloshenko
sumber
11
Ini mengasumsikan bahwa gambar telah lstersedia dan dalamPATH
chaosaffe
6

MENJELAJAHI GAMBAR DOCKER !

  1. Mencari tahu apa jenis shell yang di sana bashatau shatau ...

    Periksa gambar terlebih dahulu: docker inspect name-of-container-or-image

    Mencari entrypointatau cmdmengembalikan json.

  2. Kemudian lakukan: docker run --rm -it --entrypoint=/bin/bash name-of-image

    sekali di dalam do: ls -lsaatau perintah shell lainnya seperti:cd ..

    The -itsingkatan interaktif ... dan tty. yang --rmsingkatan kontainer menghapus setelah menjalankan.

Khalil Gharbaoui
sumber
1
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:

docker image inspect image_id

Ini berfungsi dalam versi Docker:

DockerVersion": "18.05.0-ce"
Subham Chowdhury
sumber
12
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.

Vadzim
sumber
-1

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/

pengguna11845290
sumber