es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

inotify en volúmenes montados de Docker (Mac / Linux).

Llevo varias horas buscando y parece que no encuentro la solución más actual a este problema.

Problema: Aparentemente VirtualBox está siendo utilizado por Docker en MacOS y no quiere pasar notificaciones de archivos del sistema operativo anfitrión al contenedor. Como resultado, inotifywait solo notificará actividad de archivo en una carpeta vigilada cuando esas acciones son realizadas desde dentro del contenedor. NO cuando esas acciones son realizadas desde el Anfitrión.

Dockerfile

FROM python:3.9.6
COPY main.sh /bin/main.sh
RUN chmod +x /bin/main.sh
RUN apt-get update -y
RUN apt-get install -y inotify-tools
CMD /bin/main.sh

main.sh


#!/usr/bin/env bash inotifywait -mq -r -e create -e modify -e delete -e move /data | while read path action file; do echo "El archivo '$file' apareció en el directorio '$path' a través de '$action'" >> log.txt done

Construye el contenedor

docker build -f Dockerfile -t mi_contenedor .

Ejecuta el contenedor

docker run -it -v /algunaRutaDelAnfitrión/data:/data mi_contenedor mi_contenedor

Se crea el archivo log.txt y tiene líneas para cualquier acción en la carpeta vigilada que se inició desde dentro de la shell del contenedor. Pero NO si la acción se realiza desde el Anfitrión en este volumen montado.

Estoy usando una imagen de base de python porque tengo un script de python que quiero ejecutar en cualquier archivo nuevo que entre en esa carpeta vigilada o sus subdirectorios. Este contenedor de Docker se ejecutará en mi servidor Debian, pero estoy desarrollando en un Mac.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que VirtualBox, utilizado por Docker en MacOS, no pasa las notificaciones de archivo desde el sistema operativo Host al contenedor. Esto significa que inotifywait solo notificará la actividad de archivo en una carpeta vigilada cuando esas acciones se realicen desde dentro del contenedor, NO cuando esas acciones se realicen desde el Host.

    Para resolver este problema, una posible solución es utilizar la versión más nueva de “Docker for Mac” de Docker, que reemplaza la necesidad de VirtualBox y permite la retransmisión de notificaciones de archivo del sistema operativo Host al contenedor.

    Otra alternativa es utilizar un controlador de sistema de archivos diferente, como FUSE, que también puede retransmitir notificaciones de archivo. Sin embargo, esto puede requerir una configuración y una instalación adicionales.

    En cuanto al Dockerfile y al script proporcionados, parecen correctos, pero el problema está en la retransmisión de notificaciones de archivo de MacOS. Una vez resuelto esto, el contenedor debería ser capaz de monitorear correctamente la actividad de archivo en la carpeta vigilada.

Comments are closed.