【发布时间】:2022-01-04 02:46:37
【问题描述】:
我已经搜索了几个小时,似乎找不到这个问题的最新答案
问题:显然,MacOS 上的 Docker 正在使用 VirtualBox,它不想将文件通知从主机操作系统传递到容器。因此,inotifywait 只会在被监视文件夹中的文件活动在容器内执行时通知这些活动。不是从主机执行这些操作时。
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 "The file '$file' appeared in directory '$path' via '$action'" >> log.txt
done
构建容器
docker build -f Dockerfile -t my_container .
运行容器
docker run -it -v /someHOSTdirectory/data:/data my_container my_container
log.txt 文件已创建,其中包含从容器外壳内启动的监视文件夹中的任何操作的行。但如果该操作是从主机对此安装的卷执行的,则不会
我正在使用 python 基础映像,因为我有一个 python 脚本,我想在该监视文件夹或其子目录中的任何新文件上运行该脚本。这个 docker 容器将在我的 debian 服务器上运行,但我在 mac 上开发。
【问题讨论】:
-
你能否设置一个 HTTP 监听器(可能使用 Flask)并使用 HTTP POST 请求将文件发送到进程,而不是依赖文件系统事件?
-
@大卫迷宫。感谢您的建议。我不确定这是否会起作用,因为我没有设置任何类似的东西。但是根据您的解释,我想知道这是否对我有用,因为这些文件不会通过 POST 进入,它们将被手动移动到监视文件夹中
标签: docker inotify docker-for-mac inotifywait