Hice una extracción de la ventana acoplable y puedo enumerar la imagen que se descargó. Quiero ver el contenido de esta imagen. Hice una búsqueda en la red pero no hubo una respuesta directa.
No es un tonto. Ver el contenedor y la imagen no es lo mismo. Es posible que desee ver el sistema de archivos inicial o incluso validar que no hay nada malicioso dentro de la imagen antes de que tenga la oportunidad de ejecutarse.
Keilaron
44
si no puede ejecutar la imagen como contenedor, puede usar una herramienta como drive ( github.com/wagoodman/dive ) o puede usar docker save para exportar la imagen como archivo tar. Luego puede explorar el alquitrán o, con la inmersión, puede explorar la imagen lo antes posible.
Gracias. El primero es lo que estoy buscando. Básicamente explorar las carpetas.
pylearn
9
Estoy tratando de ver el contenido de una imagen que se crea usando "DESDE cero" y no hay ningún shell disponible. ¿Hay alguna otra forma de ver los contenidos? La imagen que intento ver es portainer / portainer.
Juan Hernández
2
¿Es posible que alguien vea el contenido de la imagen sin generar un contenedor? ¿O podemos suponer que está a salvo de todos a menos que tengan derechos para generar un contenedor?
Shabirmean
3
combinando lo que se dijo antes "para un contenedor de Windows con punto de entrada": docker run -it --entrypoint cmd <image_name>funcionará.
La respuesta aceptada aquí es problemática, porque no hay garantía de que una imagen tenga algún tipo de shell interactivo. Por ejemplo, la imagen de drone / drone contiene un solo comando /drone, y también tiene un comando ENTRYPOINT, por lo que fallará:
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Y esto fallará:
$ 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".
Esta no es una configuración poco común; muchas imágenes mínimas contienen solo los binarios necesarios para admitir el servicio de destino. Afortunadamente, existen mecanismos para explorar un sistema de archivos de imagen que no dependen del contenido de la imagen. El más fácil es probablemente el docker exportcomando, que exportará un sistema de archivos contenedor como un archivo tar. Entonces, inicie un contenedor (no importa si falla o no):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Luego, use docker exportpara exportar el sistema de archivos a tar:
$ docker export $(docker ps -lq) | tar tf -
El docker ps -lqallí significa "dame la identificación del contenedor docker más reciente". Puede reemplazar eso con un nombre o id explícito del contenedor.
esta respuesta es muy útil para calcular qué podría estar dentro de un contenedor en un momento dado
João Andrade
2
Esta respuesta es más correcta y funciona para mí, ya que quiero explorar el contenido de la imagen con arquitectura extranjera y no puedo "simplemente ejecutarla"
Vladimir Perevalov
94
No debe iniciar un contenedor solo para ver el contenido de la imagen. Por ejemplo, es posible que desee buscar contenido malicioso, no ejecutarlo. Use "crear" en lugar de "ejecutar";
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
La segunda línea anterior solo enumera el contenido del sistema de archivos. Si desea obtener todos los archivos como un alquitrán, puede reemplazarlo con algo así docker export tmp_$$ > image-fs.tar.
Pino
¿Cuál será la segunda línea para el sistema operativo Windows? El docker export tmp_$$ | tar tno funcionará.
Alexei Marinichenko
@Alexei Marinichenko tarpodría no estar instalado en su máquina. Intenta tar --helpcomprobarlo.
Abdurrahman I.
1
Esto también funciona si no hay caparazón en el contenedor
Peter Dotchev
3
@AlexeiMarinichenko puede usar el -oparámetro para especificar el archivo para escribir. Por ej docker export -o c:\temp\tmp_$$.tar tmp_$$.
GiddyUpHorsey
62
docker save nginx > nginx.tar
tar -xvf nginx.tar
Los siguientes archivos están presentes:
manifest.json: describe las capas del sistema de archivos y el nombre del archivo json que tiene las propiedades de Contenedor.
.json - Propiedades del contenedor
- Cada directorio "layerid" contiene un archivo json que describe la propiedad de la capa y el sistema de archivos asociado con esa capa. Docker almacena las imágenes del Contenedor como capas para optimizar el espacio de almacenamiento mediante la reutilización de capas en las imágenes.
Esta parece ser la respuesta más útil para mí, ya que no tiene que iniciar un contenedor para obtener los archivos.
Alec Thomas
1
Absolutamente de acuerdo @AlecThomas, y para ir un paso más allá, ¿por qué dockersolo necesito ver el contenido de lo que es, esencialmente, solo un tipo diferente de archivo?
Ed Randall
buena respuesta, también especificaría la etiqueta: de lo docker save --output nginx.tar nginx:latestcontrario, de acuerdo con el documento, contendrá "todas las capas principales y todas las etiquetas + versiones"
Tarek
Esto debería ser votado ya que esta es probablemente la única forma de explorar aspectos internos si no tiene ninguna de las utilidades de Unix en su interior. Además, esta forma no requiere la creación de un contenedor.
Stanislav German-Evtushenko
9
Para enumerar el contenido detallado de una imagen, debe ejecutar docker run --rm image/name ls -alRdonde --rmsignifica eliminar tan pronto como salga de un contenedor.
El problema con esta respuesta es que, como se discutió en la respuesta aceptada, no hay garantía de que su imagen tenga ningún caparazón. O ls. O realmente cualquier herramienta común en absoluto.
Larsks
4
Podemos probar uno más simple de la siguiente manera:
Esto no muestra el contenido ; solo muestra las capas, etc., que se utilizaron para construir la imagen.
Roger Lipscombe
0
Con Docker EE para Windows (17.06.2-ee-6 en Hyper-V Server 2016), todo el contenido de los Contenedores de Windows se puede examinar en la C:\ProgramData\docker\windowsfilter\ruta del sistema operativo host.
No se necesita montaje especial.
El prefijo de carpeta se puede encontrar por la identificación del contenedor de la docker ps -asalida.
Existe una herramienta gratuita de código abierto llamada Anchore que puede usar para escanear imágenes de contenedor. Este comando le permitirá enumerar todos los archivos en una imagen de contenedor
Respuestas:
Simplemente puede ejecutar un contenedor de shell interactivo usando esa imagen y explorar cualquier contenido que tenga esa imagen.
Por ejemplo:
O siguiendo para imágenes con un
entrypoint
O, si desea ver cómo se construyó la imagen, es decir, los pasos en ella
Dockerfile
, puede:Los pasos se registrarán en el
image_history
archivo.fuente
docker run -it --entrypoint cmd <image_name>
funcionará.La respuesta aceptada aquí es problemática, porque no hay garantía de que una imagen tenga algún tipo de shell interactivo. Por ejemplo, la imagen de drone / drone contiene un solo comando
/drone
, y también tiene un comandoENTRYPOINT
, por lo que fallará:Y esto fallará:
Esta no es una configuración poco común; muchas imágenes mínimas contienen solo los binarios necesarios para admitir el servicio de destino. Afortunadamente, existen mecanismos para explorar un sistema de archivos de imagen que no dependen del contenido de la imagen. El más fácil es probablemente el
docker export
comando, que exportará un sistema de archivos contenedor como un archivo tar. Entonces, inicie un contenedor (no importa si falla o no):Luego, use
docker export
para exportar el sistema de archivos atar
:El
docker ps -lq
allí significa "dame la identificación del contenedor docker más reciente". Puede reemplazar eso con un nombre o id explícito del contenedor.fuente
No debe iniciar un contenedor solo para ver el contenido de la imagen. Por ejemplo, es posible que desee buscar contenido malicioso, no ejecutarlo. Use "crear" en lugar de "ejecutar";
fuente
docker export tmp_$$ > image-fs.tar
.docker export tmp_$$ | tar t
no funcionará.tar
podría no estar instalado en su máquina. Intentatar --help
comprobarlo.-o
parámetro para especificar el archivo para escribir. Por ejdocker export -o c:\temp\tmp_$$.tar tmp_$$
.Los siguientes archivos están presentes:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
O
puedes usar dive para ver el contenido de la imagen de forma interactiva con TUI
https://github.com/wagoodman/dive
fuente
docker
solo necesito ver el contenido de lo que es, esencialmente, solo un tipo diferente de archivo?docker save --output nginx.tar nginx:latest
contrario, de acuerdo con el documento, contendrá "todas las capas principales y todas las etiquetas + versiones"Para enumerar el contenido detallado de una imagen, debe ejecutar
docker run --rm image/name ls -alR
donde--rm
significa eliminar tan pronto como salga de un contenedor.fuente
ls
disponible y en elPATH
¡EXPLORANDO LA IMAGEN DE DOCKER !
Averiguar qué tipo de concha es de allí
bash
osh
, o ...Inspeccione la imagen primero:
docker inspect name-of-container-or-image
Busque
entrypoint
ocmd
en el json return.Entonces hazlo:
docker run --rm -it --entrypoint=/bin/bash name-of-image
una vez dentro do:
ls -lsa
o cualquier otro comando de shell como:cd ..
Los
-it
soportes para interactivo ... y tty. Los--rm
soportes para quitar el contenedor después de la ejecución.fuente
ls
. O realmente cualquier herramienta común en absoluto.Podemos probar uno más simple de la siguiente manera:
Esto funcionó en la versión de Docker:
fuente
Con Docker EE para Windows (17.06.2-ee-6 en Hyper-V Server 2016), todo el contenido de los Contenedores de Windows se puede examinar en la
C:\ProgramData\docker\windowsfilter\
ruta del sistema operativo host.No se necesita montaje especial.
El prefijo de carpeta se puede encontrar por la identificación del contenedor de la
docker ps -a
salida.fuente
Existe una herramienta gratuita de código abierto llamada Anchore que puede usar para escanear imágenes de contenedor. Este comando le permitirá enumerar todos los archivos en una imagen de contenedor
anchore-cli image content myrepo / app: últimos archivos
https://anchore.com/opensource/
fuente