Come vedere il contenuto dell'immagine della finestra mobile


295

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.



10
Non un imbecille. Visualizzare il contenitore e l'immagine non è la stessa cosa. Potresti voler visualizzare il filesystem iniziale o anche confermare che non vi siano elementi dannosi all'interno dell'immagine prima che abbia la possibilità di essere eseguiti.
Keilaron,

4
se non è possibile eseguire l'immagine come contenitore, è possibile utilizzare uno strumento come drive ( github.com/wagoodman/dive ) oppure utilizzare docker save per esportare l'immagine come file tar. Quindi puoi esplorare il catrame o con l'immersione puoi esplorare l'immagine al più presto.
FunThomas424242

Non una vittima, ma si può trovare la risposta qui: stackoverflow.com/a/40324326/5641227
Khalil Gharbaoui

Risposte:


378

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_historyfile.


1
Grazie. Il primo è quello che sto cercando. Fondamentalmente esplora le cartelle.
pylearn,

9
Sto cercando di vedere il contenuto di un'immagine che viene creata usando "DA zero" e non ci sono shell disponibili. C'è un altro modo per vedere i contenuti? L'immagine che sto cercando di vedere è portainer / portainer.
Juan Hernandez,

2
È possibile che qualcuno veda il contenuto dell'immagine senza generare un contenitore? O possiamo supporre che sia sicuro da tutti a meno che non abbiano i diritti di generarne un contenitore?
Shabirmean,

3
combinando ciò che è stato detto prima "per un contenitore Windows con entrypoint": docker run -it --entrypoint cmd <image_name>funzionerà.
Beytan Kurt,

2
@JuanHernandez, sì, puoi scaricare l'intero contenuto dell'immagine come indicato in stackoverflow.com/a/42677219/320594 .
Jaime Hablutzel,

197

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 exportcomando, 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 exportper esportare il filesystem in tar:

$ docker export $(docker ps -lq) | tar tf -

Il docker ps -lqnon significa "dammi l'id del contenitore finestra mobile più recente". È possibile sostituirlo con un nome contenitore o un ID esplicito.


5
questa risposta è di grande aiuto per capire cosa potrebbe esserci dentro un container in un dato momento
João Andrade

2
Questa risposta è più corretta e funziona per me, poiché voglio esplorare i contenuti dell'immagine con un'architettura straniera e non posso "semplicemente eseguirla"
Vladimir Perevalov,

97

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_$$

11
La seconda riga sopra elenca solo il contenuto del file system. Se vuoi ottenere tutti i file come tar puoi sostituirlo con qualcosa del genere docker export tmp_$$ > image-fs.tar.
Pino,

Quale sarà la seconda riga per il sistema operativo Windows? Il docker export tmp_$$ | tar tnon funzionerà.
Alexei Marinichenko,

@Alexei Marinichenko tarpotrebbe non essere installato sul tuo computer. Prova tar --helpa controllarlo.
Abdurrahman I.

1
Questo funziona anche se non ci sono shell nel container
Peter Dotchev,

3
@AlexeiMarinichenko è possibile utilizzare il -oparametro per specificare il file in cui scrivere. Es docker export -o c:\temp\tmp_$$.tar tmp_$$.
GiddyUpHorsey,

63
docker save nginx > nginx.tar
tar -xvf nginx.tar

Sono presenti i seguenti file:

  • manifest.json - Descrive i livelli del filesystem e il nome del file json che ha le proprietà del contenitore.
  • .json - Proprietà del contenitore
  • - Ogni directory "layerid" contiene un file json che descrive la proprietà del layer e il filesystem associato a quel layer. Docker archivia le immagini del contenitore come livelli per ottimizzare lo spazio di archiviazione riutilizzando i livelli tra le immagini.

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

inserisci qui la descrizione dell'immagine

https://github.com/wagoodman/dive


5
Questa mi sembra la risposta più utile, poiché non è necessario avviare un contenitore per ottenere i file.
Alec Thomas,

1
Assolutamente d'accordo con @AlecThomas - e per fare un passo ulteriore, perché devo anche dockersolo vedere il contenuto di quello che è, essenzialmente, solo un diverso tipo di file di archivio.
Ed Randall,

buona risposta, vorrei anche specificare il tag:, docker save --output nginx.tar nginx:latestaltrimenti, secondo il documento, conterrà "tutti i livelli padre e tutti i tag + versioni"
Tarek

Questo dovrebbe essere votato in quanto questo è probabilmente l'unico modo per esplorare gli interni se non ci sono utilità Unix all'interno. Anche in questo modo non è richiesta la creazione di un contenitore.
Stanislav German-Evtushenko,

9

Per elencare il contenuto dettagliato di un'immagine devi eseguire docker run --rm image/name ls -alRdove --rmrimuovi i mezzi non appena esce da un contenitore.

inserisci qui la descrizione dell'immagine


11
Ciò presuppone che l'immagine sia lsdisponibile e nelPATH
chaosaffe il

6

ESPLORARE L'IMMAGINE DI DOCKER !

  1. Scopri che tipo di shell è lì dentro basho sho ...

    Ispeziona prima l'immagine: docker inspect name-of-container-or-image

    Cerca entrypointo cmdnel ritorno JSON.

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

    una volta dentro fai: ls -lsao qualsiasi altro comando shell come:cd ..

    Lo -itsta per interattivo ... e tty. i --rmsupporti per rimuovere il contenitore dopo l'esecuzione.


1
Il problema con questa risposta è che, come discusso nella risposta accettata, non vi è alcuna garanzia che la tua immagine abbia delle coperture. Or ls. O davvero tutti gli strumenti comuni a tutti.
Larsks

3

Possiamo provarne uno più semplice come segue:

docker image inspect image_id

Funzionava nella versione Docker:

DockerVersion": "18.05.0-ce"

13
Questo non mostra i contenuti ; mostra solo i livelli, ecc., che sono andati nella costruzione dell'immagine.
Roger Lipscombe,

0

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 -adall'output.


-1

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

https://anchore.com/opensource/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.