Docker Bind Mount本质上是Mount了host filesystem和container filesystem。
意思就是,任何在filesystem内的改变(增加删除修改文件),将会反映到container filessystem内所mount的那个文件夹。
以下是mount的方法(MAC)以及可能遇到问题的troubleshooting。
前言
如果想用local file trigger,即当一个本地文件夹中的文件增加,删除,修改,可以击发该trigger,首先需要让n8n能够读到这个路径。
但目前我们处理的是两个不同“容器”内的文件,一个是Container Filesystem,一个是Host Machine Filesystem。我们得让他们互通。
### 第一反应
第一反应是从Docker的官方文件中找答案。以下附上Docker的官方文件。
https://docs.docker.com/engine/storage/volumes/
https://docs.docker.com/engine/storage/bind-mounts/
里面的内容说的不是很清楚,不太能读懂。尝试跟着做了之后,也没实现效果。
### 解决方案
最终是通过VS Code读取配置文件后,通过修改配置文件解决的。
首先,需要打开配置文件docker-compose.yml。
找到n8n section。
修改参数:
version: '3.7'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
volumes:
- n8n_storage:/home/node/.n8n
- ~/n8n_watch_folder:/files
environment:
- N8N_RUNNERS_ENABLED=true
volumes:
n8n_storage:
external: true
name: local-ai-packaged_n8n_storage
注意volume下的 `- ~/n8n_watch_folder:/files`。这个`n8n_watch_folder`是在我的host machine上的,即在我的电脑硬盘上的,不是container的文件。将这个文件夹挂载到n8n中的/files路径(没有的话系统会自动创建)。
### 重启Docker Composer
docker compose down
docker compose up -d
### 测试Trigger
在 Local File Trigger 节点中,将match文件夹选择为:
/files
### 激活Workflow
### 通过修改 /n8n_watch_folder 的内容测试Trigger
通过Terminal进入该文件夹的路径,通过touch创建一个测试txt文件。
$PATH: touch test.txt