OSU*_*ian 6 inotify inotifywait docker docker-for-mac
我已经搜索了几个小时,似乎找不到该问题的最新答案
问题:显然 VirtualBox 正在 MacOS 上由 Docker 使用,并且它不希望将文件通知从主机操作系统传递到容器。因此,当从容器内执行这些操作时,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
Run Code Online (Sandbox Code Playgroud)
主目录
#!/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
Run Code Online (Sandbox Code Playgroud)
构建容器
docker build -f Dockerfile -t my_container .
Run Code Online (Sandbox Code Playgroud)
运行容器
docker run -it -v /someHOSTdirectory/data:/data my_container my_container
Run Code Online (Sandbox Code Playgroud)
将创建 log.txt 文件,其中包含监视文件夹中从容器 shell 内启动的任何操作的行。但如果该操作是从主机在此安装的卷上执行的,则不会
我使用 python 基础映像是因为我有一个 python 脚本,我想在该监视文件夹或其子目录中的任何新文件上运行该脚本。这个 docker 容器将在我的 debian 服务器上运行,但我是在 Mac 上开发。
经过两天的摆弄,我找到了这个解决方案。
在 docker for mac 中,转到“首选项”>“常规”>“使用 gRPC FUSE 进行文件共享”[关闭此功能 - 默认情况下处于打开状态]。
除了检查这一点之外,我还小心地在卷安装上使用正确的大小写(例如 -v user/data:/data 不正确,应该是 -v User/data:/data)
根据docker文档,报告了osxfs事件
大多数 inotify 事件在绑定挂载中都受支持...这意味着来自 macOS 的文件>系统事件被发送到容器中并触发那里的任何侦听>进程。
因此,在这两个更改之后,即使事件是从主机操作系统执行的,我也能够让 inotifywait 记录对挂载中的监视文件夹所做的更改。
| 归档时间: |
|
| 查看次数: |
5594 次 |
| 最近记录: |