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.
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.
Antworten:
Sie können einfach einen interaktiven Shell-Container mit diesem Bild ausführen und den Inhalt des Bildes untersuchen.
Zum Beispiel:
docker run -it image_name sh
Oder folgen Sie für Bilder mit einem entrypoint
docker run -it --entrypoint sh image_name
Wenn Sie sehen möchten, wie das Image erstellt wurde, dh die darin enthaltenen Schritte Dockerfile
, können Sie:
docker image history --no-trunc image_name > image_history
Die Schritte werden in der image_history
Datei protokolliert .
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 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):
$ 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.
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_$$
docker export tmp_$$ > image-fs.tar
.
docker export tmp_$$ | tar t
wird nicht funktionieren.
tar
möglicherweise nicht auf Ihrem Computer installiert. Versuchen Sie es tar --help
zu überprüfen.
-o
Parameter können Sie die Datei angeben, in die geschrieben werden soll. ZB docker export -o c:\temp\tmp_$$.tar tmp_$$
.
docker save nginx > nginx.tar
tar -xvf nginx.tar
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
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.
ls
verfügbar ist und in derPATH
DOCKER IMAGE ENTDECKEN !
Finde heraus, welche Art von Muschel sich dort befindet bash
oder sh
oder ...
Überprüfen Sie zuerst das Bild: docker inspect name-of-container-or-image
Suchen Sie nach entrypoint
oder cmd
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.
ls
. Oder wirklich irgendwelche gängigen Werkzeuge überhaupt.
Wir können einen einfacheren wie folgt versuchen:
docker image inspect image_id
Dies funktionierte in der Docker-Version:
DockerVersion": "18.05.0-ce"
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.
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