Bir liman işçisi çekimi yaptım ve indirilen görüntüyü listeleyebilirim. Bu görüntünün içeriğini görmek istiyorum. Net bir arama yaptım ama düz bir cevap yok.
Bir liman işçisi çekimi yaptım ve indirilen görüntüyü listeleyebilirim. Bu görüntünün içeriğini görmek istiyorum. Net bir arama yaptım ama düz bir cevap yok.
Yanıtlar:
Bu görüntüyü kullanarak etkileşimli bir kabuk kabını çalıştırabilir ve görüntünün sahip olduğu içeriği keşfedebilirsiniz.
Örneğin:
docker run -it image_name sh
Veya entrypoint
docker run -it --entrypoint sh image_name
Ya da görüntünün nasıl inşa edildiğini görmek istiyorsanız, yani içindeki adımlar anlamına gelir Dockerfile
:
docker image history --no-trunc image_name > image_history
Adımlar image_history
dosyaya kaydedilir .
docker run -it --entrypoint cmd <image_name>
çalışacaktır.
Burada kabul edilen cevap sorunludur, çünkü bir görüntünün herhangi bir etkileşimli kabuğa sahip olacağının garantisi yoktur. Örneğin, drone / drone görüntü tek bir komuta içerir /drone
, ve bir sahiptir ENTRYPOINT
bu başarısız olur böylece yanı:
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Ve bu başarısız olacak:
$ 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".
Bu nadir bir yapılandırma değildir; çok az sayıda resim yalnızca hedef hizmeti desteklemek için gerekli olan ikili dosyaları içerir. Neyse ki, görüntünün içeriğine bağlı olmayan bir görüntü dosya sistemini keşfetmek için mekanizmalar vardır . En kolayı muhtemelen docker export
bir konteyner dosya sistemini tar arşivi olarak dışa aktaracak komuttur . Bu nedenle, bir konteyner başlatın (başarısız olup olmadığı önemli değildir):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Ardından docker export
, dosya sistemini aşağıdakilere aktarmak için kullanın tar
:
$ docker export $(docker ps -lq) | tar tf -
docker ps -lq
"Bana en son liman işçisi kabın id vermek" Orada anlamına gelir. Bunu açık bir kapsayıcı adı veya kimliğiyle değiştirebilirsiniz.
Yalnızca resim içeriğini görmek için bir kap başlatmamalısınız. Örneğin, kötü amaçlı içerik aramak isteyip istemediğinizi çalıştırmak isteyebilirsiniz. "Run" yerine "create" komutunu kullanın;
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
Çalışmayacaktır.
tar
makinenize yüklenmemiş olabilir. tar --help
Kontrol etmeyi deneyin .
-o
yazmak için dosyayı belirtmek için parametre kullanabilirsiniz . Örn docker export -o c:\temp\tmp_$$.tar tmp_$$
.
docker save nginx > nginx.tar
tar -xvf nginx.tar
Aşağıdaki dosyalar mevcuttur:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
VEYA
TUI ile görüntü içeriğini etkileşimli olarak görüntülemek için dalışı kullanabilirsiniz
docker
sadece farklı türde bir arşiv dosyasının içeriğini görmek için neden ihtiyacım var ?
docker save --output nginx.tar nginx:latest
aksi takdirde, dokümana göre, "tüm üst katmanları ve tüm etiketleri + sürümleri" içerecektir
Bir görüntünün ayrıntılı içeriğini listelemek için çalıştırmanız gerekir; docker run --rm image/name ls -alR
burada --rm
çıkışlar bir kapsayıcı oluşturduğu anda kaldırılır.
ls
mevcut olduğunu varsayar vePATH
DOCKER GÖRÜNTÜSÜNÜN KEŞFİ !
Orada ne tür bir kabuk olduğunu anlayın bash
ya sh
da ...
Önce görüntüyü inceleyin: docker inspect name-of-container-or-image
Arayın entrypoint
veya cmd
json karşılığında.
Sonra şunları yapın: docker run --rm -it --entrypoint=/bin/bash name-of-image
içinde bir kez yapmak: ls -lsa
veya herhangi bir kabuk komutu gibi:cd ..
-it
İnteraktif ... ve tty duruyor. --rm
çalıştırmadan sonra kabın çıkarılması için standlar.
ls
. Ya da gerçekten herhangi bir ortak araç.
Daha basit olanı aşağıdaki gibi deneyebiliriz:
docker image inspect image_id
Bu Docker sürümünde çalıştı:
DockerVersion": "18.05.0-ce"
Kap görüntülerini taramak için kullanabileceğiniz Anchore adlı ücretsiz bir açık kaynak aracı vardır. Bu komut, bir kapsayıcı görüntüsündeki tüm dosyaları listelemenize olanak tanır
anchore-cli görüntü içeriği myrepo / app: en son dosyalar