Gente de la Safor

Bienvenidos a Spain News Today.

Cómo verificar los cambios realizados en el sistema de archivos del contenedor Docker

Cómo verificar los cambios realizados en el sistema de archivos del contenedor Docker

logotipo de ventana acoplable

Los contenedores Docker heredan su sistema de archivos de imagen en la creación inicial. El sistema de archivos del contenedor puede diferir del contenido de la imagen después de la creación si se realizan cambios en el contenedor. capa de escritura.

La capacidad de escanear los cambios del sistema de archivos puede ayudarlo a depurar e investigar los datos perdidos. Los archivos escritos en el sistema de archivos del contenedor se perderán cuando el contenedor se reinicie o se destruya. En algunos casos, puede realizar inadvertidamente operaciones de escritura que deberían dirigirse a un archivo El sonido Mientras que.

En este artículo, compartiremos algunas técnicas para identificar las modificaciones realizadas en los sistemas de archivos de contenedores. Puede utilizar esta información para realizar un seguimiento de la actividad del contenedor e investigar las incoherencias entre diferentes entornos.

Uso de diferencias de Docker

La CLI de Docker tiene un comando integrado para esto. administración docker diff Contará todos los cambios realizados en archivos y directorios dentro de un contenedor en particular. Acepta el identificador o nombre del contenedor que desea escanear.

Inicie un contenedor simple para fines de demostración:

$ docker run -it --name alpine alpine:latest sh

Esto iniciará un nuevo contenedor que ejecuta la imagen alpina. La ventana de la terminal se adjuntará al contenedor. Deje esta ventana abierta.

ahora corriendo docker diff En una segunda sesión de terminal:

$ docker diff alpine

No se produjo ningún resultado porque el nuevo contenedor aún coincide perfectamente con el sistema de archivos de imágenes alpine.

Regrese a la primera terminal que aún está unida al contenedor. Ejecute algunos comandos que agregan, eliminan o cambian archivos:

/ # touch demo
/ # touch example

Regrese a la primera ventana de shell. Repetición docker diff El comando para ver los cambios realizados:

$ docker diff alpine
A /example
C /root
C /root/.ash_history
A /demo

Los dos nuevos archivos ahora aparecen en la salida del comando. administración touch También agregó entradas al historial de contenedores del contenedor. editar a /root/.ash_history El cambio resultante también ha sido informado en /root Guía.

Interpretación de la salida de Docker Diff

Cada línea de producción es producida por docker diff prefijado con cualquiera de ellos AY el C o D Según el tipo de cambio que se haya producido:

  • A – El archivo o directorio se ha agregado al sistema de archivos del contenedor. Ninguno en la imagen original.
  • C – El contenido del archivo o directorio es diferente a la versión de la imagen.
  • D – La ruta de la imagen se ha eliminado del contenedor.

Esta información le permite buscar rápidamente incoherencias que puedan explicar la falta de datos o un comportamiento inesperado.

Cualquier cambio en el sistema de archivos que no aparezca en la salida afectará las rutas asignadas al volumen de Docker. Estos archivos se almacenan fuera del contenedor, independientemente de su sistema de archivos, por lo que no son vistos por docker diff .

Mostrar el contenido en la imagen original

Puede ser útil comparar la versión del archivo incluido con la imagen original. Puede hacer esto creando un nuevo contenedor y luego copiando el archivo. Usos docker create en vez de docker run Entonces, el contenedor se creó pero no se inició. Esto asegurará que las modificaciones inducidas por el script en el punto de entrada de la imagen no afecten el resultado.

$ docker create --name temp-container my-image:latest
$ docker cp temp-container:/path/to/file copied-file
$ docker rm temp-container

Un método alternativo es ejecutar el contenedor con un punto de entrada personalizado que envía el contenido del archivo al flujo de salida estándar. Incluir --rm Marque para que el contenedor se elimine automáticamente después de completar el comando:

$ docker run --rm --entrypoint cat alpine:latest /path/to/file > copied-file

Compara las diferencias entre dos contenedores.

A veces, es posible que deba comparar las diferencias entre dos contenedores diferentes que ejecutan la misma imagen. primer uso docker diff Para listas de cambios individuales:

$ docker diff first-container > first
$ docker diff second-container > second

Ahora puede usar herramientas estándar de Unix como diff Comando para encontrar diferencias en dos listas de cambios:

diff first second
3c3
< A /a-new-file
---
> A /demo

La diferencia muestra que /a-new-file Se retiró en el segundo contenedor durante /demo ha sido añadido.

Otra forma de comparar contenedores es usar docker export y el comando tar para acceder a una lista completa de archivos:

$ docker export demo-container | tar tv
-rwxr-xr-x 0/0               0 2022-06-21 14:21 .dockerenv
drwxr-xr-x 0/0               0 2022-05-23 17:51 bin/
lrwxrwxrwx 0/0               0 2022-05-23 17:51 bin/arch -> /bin/busybox
lrwxrwxrwx 0/0               0 2022-05-23 17:51 bin/ash -> /bin/busybox
lrwxrwxrwx 0/0               0 2022-05-23 17:51 bin/base64 -> /bin/busybox
lrwxrwxrwx 0/0               0 2022-05-23 17:51 bin/bbconfig -> /bin/busybox
...

Repita este comando para cada uno de sus contenedores. A continuación, puede utilizar archivos diff Para comparar las dos listas. La salida tar mejorada puede ayudarlo a rastrear cuándo se han cambiado los archivos mientras muestra los tiempos y permisos de modificación.

Resumen

Los sistemas de archivos del contenedor Docker deben parecerse a la imagen a partir de la cual se crean. Pueden ocurrir inconsistencias cuando el programa dentro del contenedor escribe el contenido directamente en el sistema de archivos. Los usuarios pueden ser otra fuente de diferencias, cuando mecanismos como docker exec Se utiliza para ejecutar comandos dentro de un contenedor en ejecución.

los docker diff La herramienta proporciona una manera conveniente de ver estos cambios. Aunque no puede saber por qué se agregó o eliminó un archivo, poder recuperar la lista de modificaciones puede ser muy valioso para comprender por qué se observa un comportamiento particular.

En este artículo, nos enfocamos en examinar los cambios realizados en los contenedores en ejecución. Puedes usar diferentes herramientas como docker history y buceo Comprueba los cambios realizados en las capas dentro de una imagen de Docker. Los dos métodos se pueden usar en conjunto, lo que le permite especificar el punto exacto en el que se agregó o modificó un archivo dentro de la pila de capas del contenedor.