Ho fatto un pull docker e posso elencare l'immagine che è stata scaricata. Voglio vedere il contenuto di questa immagine. Ho fatto una ricerca in rete ma nessuna risposta diretta.
Ho fatto un pull docker e posso elencare l'immagine che è stata scaricata. Voglio vedere il contenuto di questa immagine. Ho fatto una ricerca in rete ma nessuna risposta diretta.
Risposte:
Puoi semplicemente eseguire un contenitore shell interattivo usando quell'immagine ed esplorare qualunque contenuto abbia quell'immagine.
Per esempio:
docker run -it image_name sh
O seguendo per le immagini con un entrypoint
docker run -it --entrypoint sh image_name
Oppure, se vuoi vedere come è stata creata l'immagine, ovvero i passaggi nella sua Dockerfile
, puoi:
docker image history --no-trunc image_name > image_history
I passaggi verranno registrati nel image_history
file.
docker run -it --entrypoint cmd <image_name>
funzionerà.
La risposta accettata qui è problematica, perché non vi è alcuna garanzia che un'immagine abbia qualsiasi tipo di shell interattiva. Ad esempio, l'immagine drone / drone contiene su un singolo comando /drone
, e ha anche un ENTRYPOINT
, quindi questo fallirà:
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
E questo fallirà:
$ 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".
Questa non è una configurazione insolita; molte immagini minime contengono solo i file binari necessari per supportare il servizio di destinazione. Fortunatamente, ci sono meccanismi per esplorare un filesystem di immagine che non dipendono dal contenuto dell'immagine. Il più semplice è probabilmente il docker export
comando, che esporterà un filesystem container come archivio tar. Quindi, avvia un contenitore (non importa se fallisce o no):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Quindi utilizzare docker export
per esportare il filesystem in tar
:
$ docker export $(docker ps -lq) | tar tf -
Il docker ps -lq
non significa "dammi l'id del contenitore finestra mobile più recente". È possibile sostituirlo con un nome contenitore o un ID esplicito.
Non dovresti avviare un contenitore solo per vedere il contenuto dell'immagine. Ad esempio, potresti voler cercare contenuti dannosi, non eseguirli. Usa "crea" invece di "esegui";
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
non funzionerà.
tar
potrebbe non essere installato sul tuo computer. Prova tar --help
a controllarlo.
-o
parametro per specificare il file in cui scrivere. Es docker export -o c:\temp\tmp_$$.tar tmp_$$
.
docker save nginx > nginx.tar
tar -xvf nginx.tar
Sono presenti i seguenti file:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
O
puoi usare l' immersione per visualizzare il contenuto dell'immagine in modo interattivo con TUI
docker
solo vedere il contenuto di quello che è, essenzialmente, solo un diverso tipo di file di archivio.
docker save --output nginx.tar nginx:latest
altrimenti, secondo il documento, conterrà "tutti i livelli padre e tutti i tag + versioni"
Per elencare il contenuto dettagliato di un'immagine devi eseguire docker run --rm image/name ls -alR
dove --rm
rimuovi i mezzi non appena esce da un contenitore.
ls
disponibile e nelPATH
ESPLORARE L'IMMAGINE DI DOCKER !
Scopri che tipo di shell è lì dentro bash
o sh
o ...
Ispeziona prima l'immagine: docker inspect name-of-container-or-image
Cerca entrypoint
o cmd
nel ritorno JSON.
Quindi fa: docker run --rm -it --entrypoint=/bin/bash name-of-image
una volta dentro fai: ls -lsa
o qualsiasi altro comando shell come:cd ..
Lo -it
sta per interattivo ... e tty. i --rm
supporti per rimuovere il contenitore dopo l'esecuzione.
ls
. O davvero tutti gli strumenti comuni a tutti.
Possiamo provarne uno più semplice come segue:
docker image inspect image_id
Funzionava nella versione Docker:
DockerVersion": "18.05.0-ce"
Con Docker EE per Windows (17.06.2-ee-6 su Hyper-V Server 2016) è possibile esaminare tutti i contenuti dei contenitori di Windows sul C:\ProgramData\docker\windowsfilter\
percorso del sistema operativo host.
Non è necessario alcun montaggio speciale.
Il prefisso della cartella può essere trovato dall'ID contenitore docker ps -a
dall'output.
Esiste uno strumento open source gratuito chiamato Anchore che è possibile utilizzare per scansionare le immagini del contenitore. Questo comando ti consentirà di elencare tutti i file in un'immagine contenitore
contenuto immagine anchore-cli myrepo / app: ultimi file