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.
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.
Jawaban:
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_history
file.
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 ENTRYPOINT
juga, 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 export
perintah, 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 export
untuk mengekspor sistem file ke tar
:
$ docker export $(docker ps -lq) | tar tf -
Di docker ps -lq
sana berarti "beri saya id wadah buruh pelabuhan terbaru". Anda bisa menggantinya dengan nama atau id wadah eksplisit.
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_$$
docker export tmp_$$ > image-fs.tar
.
docker export tmp_$$ | tar t
tidak akan bekerja.
tar
mungkin tidak diinstal pada mesin Anda. Cobalah tar --help
untuk memeriksanya.
-o
parameter untuk menentukan file untuk menulis. Misalnya docker export -o c:\temp\tmp_$$.tar tmp_$$
.
docker save nginx > nginx.tar
tar -xvf nginx.tar
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
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.
ls
tersedia dan dalamPATH
MENJELAJAHI GAMBAR DOCKER !
Mencari tahu apa jenis shell yang di sana bash
atau sh
atau ...
Periksa gambar terlebih dahulu: docker inspect name-of-container-or-image
Mencari entrypoint
atau cmd
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.
ls
. Atau benar-benar ada alat umum sama sekali.
Kita dapat mencoba yang lebih sederhana sebagai berikut:
docker image inspect image_id
Ini berfungsi dalam versi Docker:
DockerVersion": "18.05.0-ce"
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