Ich habe einen Docker gezogen und kann das heruntergeladene Bild auflisten. Ich möchte den Inhalt dieses Bildes sehen. Habe im Internet gesucht, aber keine klare Antwort.
Kein Betrüger. Das Betrachten des Containers und des Bildes ist nicht dasselbe. Möglicherweise möchten Sie das ursprüngliche Dateisystem anzeigen oder sogar überprüfen, ob das Image schädlich ist, bevor es ausgeführt werden kann.
Keilaron
4
Wenn Sie das Image nicht als Container ausführen konnten, können Sie ein Tool wie Laufwerk ( github.com/wagoodman/dive ) oder Docker Save verwenden, um das Image als TAR-Datei zu exportieren. Dann können Sie den Teer erkunden oder mit einem Tauchgang so schnell wie möglich das Bild erkunden.
Vielen Dank. Das erste ist, wonach ich suche. Grundsätzlich erkunden Sie die Ordner.
Pylearn
9
Ich versuche, den Inhalt eines Bildes zu sehen, das mit "FROM Scratch" erstellt wurde, und es ist keine Shell verfügbar. Gibt es eine andere Möglichkeit, den Inhalt anzuzeigen? Das Bild, das ich sehen möchte, ist portainer / portainer.
Juan Hernandez
2
Ist es möglich, dass jemand den Inhalt des Bildes sieht, ohne einen Container zu erzeugen? Oder können wir davon ausgehen, dass es vor allen sicher ist, es sei denn, sie haben das Recht, einen Container daraus zu erzeugen?
Shabirmean
3
Das Kombinieren der zuvor genannten Informationen "für einen Windows-Container mit dem Einstiegspunkt": docker run -it --entrypoint cmd <image_name>funktioniert.
Die hier akzeptierte Antwort ist problematisch, da nicht garantiert werden kann, dass ein Bild eine interaktive Shell enthält. Zum Beispiel enthält das Drohnen- / Drohnen- Image einen einzelnen Befehl /drone, und es hat auch einen ENTRYPOINT, so dass dies fehlschlägt:
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Und das wird scheitern:
$ 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".
Dies ist keine ungewöhnliche Konfiguration. Viele minimale Bilder enthalten nur die Binärdateien, die zur Unterstützung des Zieldienstes erforderlich sind. Glücklicherweise gibt es Mechanismen zum Erkunden eines Bilddateisystems, die nicht vom Inhalt des Bildes abhängen . Am einfachsten ist wahrscheinlich der docker exportBefehl, mit dem ein Container- Dateisystem als Tar-Archiv exportiert wird . Starten Sie also einen Container (es spielt keine Rolle, ob er fehlschlägt oder nicht):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Verwenden Sie dann docker export, um das Dateisystem zu exportieren in tar:
$ docker export $(docker ps -lq) | tar tf -
Das docker ps -lq dort bedeutet "gib mir die ID des neuesten Docker-Containers". Sie können dies durch einen expliziten Containernamen oder eine ID ersetzen.
Diese Antwort ist sehr hilfreich, um herauszufinden, was sich zu einem bestimmten Zeitpunkt in einem Container befinden könnte
João Andrade,
2
Diese Antwort ist korrekter und funktioniert für mich, da ich den Inhalt des Bildes mit fremder Architektur untersuchen möchte und es nicht "einfach ausführen" kann
Vladimir Perevalov
94
Sie sollten keinen Container starten, nur um den Bildinhalt zu sehen. Beispielsweise möchten Sie möglicherweise nach schädlichen Inhalten suchen und diese nicht ausführen. Verwenden Sie "create" anstelle von "run".
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
In der zweiten Zeile oben wird nur der Inhalt des Dateisystems aufgelistet. Wenn Sie alle Dateien als Teer erhalten möchten, können Sie sie durch etwas wie ersetzen docker export tmp_$$ > image-fs.tar.
Pino
Was wird die 2. Zeile für Windows sein? Das docker export tmp_$$ | tar twird nicht funktionieren.
Alexei Marinichenko
@Alexei Marinichenko ist tarmöglicherweise nicht auf Ihrem Computer installiert. Versuchen Sie es tar --helpzu überprüfen.
Abdurrahman I.
1
Dies funktioniert auch, wenn sich keine Shell im Container befindet
Peter Dotchev
3
@AlexeiMarinichenko Mit dem -oParameter können Sie die Datei angeben, in die geschrieben werden soll. ZB docker export -o c:\temp\tmp_$$.tar tmp_$$.
GiddyUpHorsey
62
docker save nginx > nginx.tar
tar -xvf nginx.tar
Folgende Dateien sind vorhanden:
manifest.json - Beschreibt Dateisystemebenen und den Namen der JSON-Datei mit den Containereigenschaften.
.json - Containereigenschaften
- Jedes "Layer-ID" -Verzeichnis enthält eine JSON-Datei, die die Layereigenschaften und das Dateisystem beschreibt, die diesem Layer zugeordnet sind. Docker speichert Containerbilder als Ebenen, um den Speicherplatz zu optimieren, indem Ebenen über Bilder hinweg wiederverwendet werden.
Dies scheint mir die nützlichste Antwort zu sein, da Sie keinen Container starten müssen, um die Dateien abzurufen.
Alec Thomas
1
Stimmen Sie @AlecThomas absolut zu - und um noch einen Schritt weiter zu gehen, warum muss ich überhaupt dockernur den Inhalt einer anderen Art von Archivdatei sehen?
Ed Randall
Gute Antwort, ich würde auch das Tag angeben: docker save --output nginx.tar nginx:latestAndernfalls enthält es laut Dokument "alle übergeordneten Ebenen und alle Tags + Versionen"
Tarek
Dies sollte positiv bewertet werden, da dies wahrscheinlich die einzige Möglichkeit ist, Interna zu erkunden, wenn Sie keine Unix-Utils enthalten. Auch auf diese Weise muss kein Container erstellt werden.
Stanislav German-Evtushenko
9
Zur Liste der detaillierten Inhalt eines Bildes müssen Sie laufen , docker run --rm image/name ls -alRwo --rmMittel entfernen, sobald Ausfahrten einen Behälter bilden.
Das Problem bei dieser Antwort ist, dass, wie in der akzeptierten Antwort erläutert, keine Garantie dafür besteht, dass Ihr Bild eine Shell enthält. Oder ls. Oder wirklich irgendwelche gängigen Werkzeuge überhaupt.
Der Inhalt wird nicht angezeigt . Es werden nur die Ebenen usw. angezeigt, mit denen das Bild erstellt wurde.
Roger Lipscombe
0
Mit Docker EE für Windows (17.06.2-ee-6 auf Hyper-V Server 2016) können alle Inhalte von Windows-Containern unter überprüft werden C:\ProgramData\docker\windowsfilter\ Pfad des Host-Betriebssystems .
Keine spezielle Montage erforderlich.
Das Ordnerpräfix kann anhand der Container-ID aus der docker ps -aAusgabe ermittelt werden.
Es gibt ein kostenloses Open Source-Tool namens Anchore, mit dem Sie Containerbilder scannen können. Mit diesem Befehl können Sie alle Dateien in einem Container-Image auflisten
Antworten:
Sie können einfach einen interaktiven Shell-Container mit diesem Bild ausführen und den Inhalt des Bildes untersuchen.
Zum Beispiel:
Oder folgen Sie für Bilder mit einem
entrypoint
Wenn Sie sehen möchten, wie das Image erstellt wurde, dh die darin enthaltenen Schritte
Dockerfile
, können Sie:Die Schritte werden in der
image_history
Datei protokolliert .quelle
docker run -it --entrypoint cmd <image_name>
funktioniert.Die hier akzeptierte Antwort ist problematisch, da nicht garantiert werden kann, dass ein Bild eine interaktive Shell enthält. Zum Beispiel enthält das Drohnen- / Drohnen- Image einen einzelnen Befehl
/drone
, und es hat auch einenENTRYPOINT
, so dass dies fehlschlägt:Und das wird scheitern:
Dies ist keine ungewöhnliche Konfiguration. Viele minimale Bilder enthalten nur die Binärdateien, die zur Unterstützung des Zieldienstes erforderlich sind. Glücklicherweise gibt es Mechanismen zum Erkunden eines Bilddateisystems, die nicht vom Inhalt des Bildes abhängen . Am einfachsten ist wahrscheinlich der
docker export
Befehl, mit dem ein Container- Dateisystem als Tar-Archiv exportiert wird . Starten Sie also einen Container (es spielt keine Rolle, ob er fehlschlägt oder nicht):Verwenden Sie dann
docker export
, um das Dateisystem zu exportieren intar
:Das
docker ps -lq
dort bedeutet "gib mir die ID des neuesten Docker-Containers". Sie können dies durch einen expliziten Containernamen oder eine ID ersetzen.quelle
Sie sollten keinen Container starten, nur um den Bildinhalt zu sehen. Beispielsweise möchten Sie möglicherweise nach schädlichen Inhalten suchen und diese nicht ausführen. Verwenden Sie "create" anstelle von "run".
quelle
docker export tmp_$$ > image-fs.tar
.docker export tmp_$$ | tar t
wird nicht funktionieren.tar
möglicherweise nicht auf Ihrem Computer installiert. Versuchen Sie estar --help
zu überprüfen.-o
Parameter können Sie die Datei angeben, in die geschrieben werden soll. ZBdocker export -o c:\temp\tmp_$$.tar tmp_$$
.Folgende Dateien sind vorhanden:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
ODER
Sie können tauchen , um den Bildinhalt interaktiv mit TUI anzuzeigen
https://github.com/wagoodman/dive
quelle
docker
nur den Inhalt einer anderen Art von Archivdatei sehen?docker save --output nginx.tar nginx:latest
Andernfalls enthält es laut Dokument "alle übergeordneten Ebenen und alle Tags + Versionen"Zur Liste der detaillierten Inhalt eines Bildes müssen Sie laufen ,
docker run --rm image/name ls -alR
wo--rm
Mittel entfernen, sobald Ausfahrten einen Behälter bilden.quelle
ls
verfügbar ist und in derPATH
DOCKER IMAGE ENTDECKEN !
Finde heraus, welche Art von Muschel sich dort befindet
bash
odersh
oder ...Überprüfen Sie zuerst das Bild:
docker inspect name-of-container-or-image
Suchen Sie nach
entrypoint
odercmd
in der json Rückkehr.Dann mach:
docker run --rm -it --entrypoint=/bin/bash name-of-image
Sobald Sie drinnen sind, tun Sie:
ls -lsa
oder einen anderen Shell-Befehl wie:cd ..
Das
-it
steht für interaktiv ... und tty. die--rm
steht für Behälter nach dem Lauf entfernen.quelle
ls
. Oder wirklich irgendwelche gängigen Werkzeuge überhaupt.Wir können einen einfacheren wie folgt versuchen:
Dies funktionierte in der Docker-Version:
quelle
Mit Docker EE für Windows (17.06.2-ee-6 auf Hyper-V Server 2016) können alle Inhalte von Windows-Containern unter überprüft werden
C:\ProgramData\docker\windowsfilter\
Pfad des Host-Betriebssystems .Keine spezielle Montage erforderlich.
Das Ordnerpräfix kann anhand der Container-ID aus der
docker ps -a
Ausgabe ermittelt werden.quelle
Es gibt ein kostenloses Open Source-Tool namens Anchore, mit dem Sie Containerbilder scannen können. Mit diesem Befehl können Sie alle Dateien in einem Container-Image auflisten
anchorore-cli Bildinhalt myrepo / app: neueste Dateien
https://anchore.com/opensource/
quelle