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.