GNU/Linux >> Tutoriales Linux >  >> Linux

Explorando el sistema de archivos del contenedor Docker

Aquí hay un par de métodos diferentes...

A) Usar docker exec (más fácil)

Docker versión 1.3 o posterior admite el comando exec que se comportan de forma similar a nsenter . Este comando puede ejecutar un nuevo proceso en un contenedor que ya se está ejecutando (el contenedor debe tener el proceso PID 1 en ejecución). Puedes ejecutar /bin/bash para explorar el estado del contenedor:

docker exec -t -i mycontainer /bin/bash

consulte la documentación de la línea de comandos de Docker

B) Usar instantáneas

Puede evaluar el sistema de archivos del contenedor de esta manera:

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

De esta manera, puede evaluar el sistema de archivos del contenedor en ejecución en el momento preciso. El contenedor aún se está ejecutando, no se incluyen cambios futuros.

Más tarde puede eliminar la instantánea usando (¡el sistema de archivos del contenedor en ejecución no se ve afectado!):

docker rmi mysnapshot

C) Usar ssh

Si necesita acceso continuo, puede instalar sshd en su contenedor y ejecutar el demonio sshd:

 docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
 
 # you need to find out which port to connect:
 docker ps

De esta manera, puede ejecutar su aplicación usando ssh (conéctese y ejecute lo que quiera).

D) Usar nsenter

Usa nsenter , consulte Por qué no necesita ejecutar SSHd en sus contenedores de Docker

La versión corta es:con nsenter, puede obtener un shell en un contenedor existente, incluso si ese contenedor no ejecuta SSH ni ningún tipo de demonio de propósito especial


ACTUALIZACIÓN:EXPLORANDO!

Este comando debería permitirle explorar un contenedor docker en ejecución :

docker exec -it name-of-container bash

El equivalente para esto en docker-compose sería:

docker-compose exec web bash

(web es el nombre del servicio en este caso y tiene tty por defecto).

Una vez que estés dentro haz:

ls -lsa

o cualquier otro comando bash como:

cd ..

Este comando debería permitirle explorar una imagen acoplable :

docker run --rm -it --entrypoint=/bin/bash name-of-image

una vez dentro haz:

ls -lsa

o cualquier otro comando bash como:

cd ..

El -it significa interactivo... y tty.

Este comando debería permitirle inspeccionar una imagen o un contenedor acoplable en ejecución :

docker inspect name-of-container-or-image

Es posible que desee hacer esto y averiguar si hay algún bash o sh ahí. Busque el punto de entrada o cmd en el retorno json.

NOTA: Esta respuesta se basa en la presencia de la herramienta de comentarios, pero si no hay bash shell o herramientas comunes como ls presente, primero podría agregar uno en una capa si tiene acceso al Dockerfile :ejemplo para alpino:

RUN apk add --no-cache bash

De lo contrario, si no tiene acceso al Dockerfile luego simplemente copie los archivos de un contenedor recién creado y mírelos haciendo:

docker create <image>  # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah

consulte la documentación de docker exec

ver docker-compose exec documentación

ver docker inspeccionar la documentación

ver docker crear documentación


En caso de que su contenedor se detenga o no tenga un shell (por ejemplo, hello-world mencionado en la guía de instalación, o no alpine traefik ), este es probablemente el único método posible para explorar el sistema de archivos.

Puede archivar el sistema de archivos de su contenedor en un archivo tar:

docker export adoring_kowalevski > contents.tar

O enumere los archivos:

docker export adoring_kowalevski | tar t

Tenga en cuenta que, dependiendo de la imagen, puede llevar algo de tiempo y espacio en disco.


Linux
  1. Simplemente diga no a la raíz (en contenedores)

  2. ¿Cómo catear un archivo de Awk?

  3. ¿Extraer archivo de la imagen de Docker?

  4. Bloqueo del sistema de archivos CWP

  5. Sistema de archivos multiplataforma

Introducción al sistema de archivos de Linux

Comando Fsck en Linux (Sistema de archivos de reparación)

Administración del sistema de archivos de red (NFS) en Linux

Cómo usar SSH en un contenedor Docker

¿Qué es el sistema de archivos de Linux? Guía fácil

Cómo gestionar contenedores Docker