大家好!
我是論壇的新手,我在基於 Ubuntu 的 Docker 上進行了首次安裝。現在的任務是建立一個工作流程來取得資料並將其放在 Windows Share(Windows Server 2019)上。路徑已包含在 FSTAB 中,操作系統可以進行寫入存取。但遺憾的是,我無法從 N8N 獲得存取權限。
我收到的錯誤訊息是:
The file “/data/windows/Transfer/Bestell-Lagerdaten/orders.csv” is not writable.
我的 docker-compose.yml 如下所示:
n8n-2:
image: ‘docker.n8n.io/n8nio/n8n:latest’
container_name: n8n-server-n8n-2
restart: unless-stopped
user: “1000:1000” # <— 強制 n8n 使用您 CIFS 選項的確切 UID
volumes:
- /home/n8n-2:/home/node/.n8n
- /mnt/windows_export_n8n2:/data/windows # ← 已變更:現在直接指向主機路徑
environment:
- N8N_LISTEN_ADDRESS=0.0.0.0
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false
- N8N_BLOCK_ENV_ACCESS_IN_NODE=false
- N8N_SECURE_COOKIE=false
- WEBHOOK_URL=此處為 URL
- N8N_HOST=此處為 URL
- N8N_PORT=5678
- N8N_PROTOCOL=http
- N8N_PROXY_HOPS=1
- DISABLE_IPV6=true
- N8N_EMAIL_METHOD=smtp
- N8N_SMTP_HOST=192.168.XX.9
- N8N_SMTP_PORT=25
- N8N_SMTP_USER=n8n@XXXXXX.com
- N8N_SMTP_PASS=NnXXXXXX
- N8N_SMTP_SENDER=n8n-2@XXXXX.com
- N8N_SMTP_SSL=false
labels:
- “com.centurylinklabs.watchtower.enable=true”
networks:
- proxy-network
FSTAB 項目如下所示:
//192.168.XX.5/Daten /mnt/windows_export_n8n2 cifs username=XW,domain=XXXX.local,password=**********,uid=1000,gid=1000,forceuid,forcegid,vers=3.0,file_mode=0777,dir_mode=0777,rw,nobrl,nofail 0 0
File Share 具有理論上需要的所有共用權限和安全權限。
你們有什麼想法知道問題可能出在哪裡嗎?
提前感謝!
嗨 @StephanRo
在 n8n 2.0 中,預設設定已變更,檔案操作預設受到限制。N8N_RESTRICT_FILE_ACCESS_TO 環境變數現在預設為 ~/.n8n-files — 你必須明確允許你想使用的目錄。此外,對於 Docker,Read/Write Files 節點中的路徑是指容器的檔案系統,而不是你的主機,因此將 Windows 共享掛載為磁碟區是正確的,但我們需要告訴 n8n 允許存取它。
你可以嘗試以下做法:
n8n-2:
image: 'docker.n8n.io/n8nio/n8n:latest'
container_name: n8n-server-n8n-2
restart: unless-stopped
user: "1000:1000"
volumes:
- /home/n8n-2:/home/node/.n8n
- /mnt/windows_export_n8n2:/files # ← 改為 /files
environment:
N8N_LISTEN_ADDRESS=0.0.0.0
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false
N8N_BLOCK_ENV_ACCESS_IN_NODE=false
N8N_SECURE_COOKIE=false
WEBHOOK_URL=URL was here
N8N_HOST=URL was here
N8N_PORT=5678
N8N_PROTOCOL=http
N8N_PROXY_HOPS=1
DISABLE_IPV6=true
N8N_EMAIL_METHOD=smtp
N8N_SMTP_HOST=192.168.XX.9
N8N_SMTP_PORT=25
N8N_SMTP_USER=n8n@XXXXXX.com
N8N_SMTP_PASS=NnXXXXXX
N8N_SMTP_SENDER=n8n-2@XXXXX.com
N8N_SMTP_SSL=false
N8N_RESTRICT_FILE_ACCESS_TO="/files" # ← 新增此項以允許存取
labels:
"com.centurylinklabs.watchtower.enable=true"
networks:
proxy-network
然後在 Read/Write Files 節點中使用 /files/your-folder/your-file.txt 作為你的路徑。
哇,這麼快就完成了,太棒了!
我怎樣才能最好地開始呢,我到底要在哪裡輸入什麼呢
抱歉,我對這個主題還不是很深入了解。
@StephanRo
你需要修改 docker-compose.yml。讓它類似於我發佈的內容
嗨 @StephanRo 歡迎!
將允許清單設定為您已經掛載的路徑,並不加引號寫入值。在 environment: 列表形式中,Compose 會將引號字符保留為值的一部分,因此 "/data/windows" 永遠不會與您的路徑相符:
environment:
- N8N_RESTRICT_FILE_ACCESS_TO=/data/windows
在該區塊中的每一行保持前置破折號,如果稍後需要多個資料夾,請用分號分隔。
環境變更不會到達已在執行的容器,因此請重新建立而不是重新啟動:
docker compose up -d --force-recreate n8n-2
在做太多改變之前,我會檢查一件小事:從容器內部以 n8n 執行的相同用戶身份測試確切的路徑。
例如:
docker exec -it -u 1000:1000 n8n-server-n8n-2 sh
id
ls -ld /files /files/Transfer /files/Transfer/Bestell-Lagerdaten
touch /files/Transfer/Bestell-Lagerdaten/n8n-write-test.txt
如果失敗,問題仍在 Docker 掛載/SMB/UID 級別。
如果成功,那麼掛載可能沒有問題,我會專注於 n8n 端的路徑允許清單,並確保節點使用的是容器路徑而不是主機路徑。
另外,如果 compose 程式碼片段中的任何 SMTP 值是真實的,發佈後我會輪換這些值。這是故障排除時容易忽略的事情。
完美。我會使用那個測試來將問題分成兩部分。
如果 touch 命令在容器內能正常運作,SMB 掛載可能沒問題,下一個要檢查的是 n8n 檔案存取允許清單以及在讀取/寫入檔案節點中使用的路徑。在這種情況下,該節點應該使用容器路徑,如 /files/…,而不是 Windows 或主機路徑。
如果 touch 命令在容器內執行失敗,那麼我會在修改工作流程之前先修正 Docker 磁碟區 / SMB 權限。這樣可以避免你在容器根本還無法寫入掛載資料夾時除錯 n8n。
非常感謝同事!完成了,現在可以寫入文件系統了。
現在我們這樣運行它:
n8n-2:
image: ‘docker.n8n.io/n8nio/n8n:latest’
container_name: n8n-server-n8n-2
restart: unless-stopped
user: “1000:1000”
volumes:
- /home/n8n-2:/home/node/.n8n
- /mnt/windows_export_n8n2:/data/windows
environment:
- N8N_LISTEN_ADDRESS=0.0.0.0
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false
- N8N_BLOCK_ENV_ACCESS_IN_NODE=false
- N8N_SECURE_COOKIE=false
- WEBHOOK_URL=https://n8n2..com
- N8N_HOST=n8n2..com
- N8N_PORT=5678
- N8N_PROTOCOL=http
- N8N_PROXY_HOPS=1
- DISABLE_IPV6=true
- N8N_EMAIL_METHOD=smtp
- N8N_SMTP_HOST=192.1.0.9
- N8N_SMTP_PORT=25
- N8N_SMTP_USER=n8n@.com
- N8N_SMTP_PASS=fewgerhrnztr
- N8N_SMTP_SENDER=n8n-2@.com
- N8N_SMTP_SSL=false
- N8N_RESTRICT_FILE_ACCESS_TO=/data/windows
labels:
- “com.centurylinklabs.watchtower.enable=true”
networks:
- proxy-network
volumes:
n8n-server_n8n_data:
external: true
npm_data:
npm_letsencrypt: