Nodo Read/Write Files from Disk lanzando error "is not writable" en múltiples entornos (Windows & Docker) - v2.26.4

Describe el problema/error/pregunta

Hola a todos,
Estoy enfrentando un problema persistente con el nodo Read/Write Files from Disk (v1.1) al intentar ejecutar una operación “Write File to Disk”. Consistentemente lanza un error indicando que el archivo no es escribible, independientemente de la carpeta, permisos de usuario o modo de ejecución.

Mi Entorno:

  • Versión n8n: 2.26.4 (Auto alojado)
  • Modo de Ejecución: Probado tanto en Windows nativo (configuración de Node.js) como a través de Docker Desktop (backend WSL2).
  • Modo de Base de Datos: Probado con ambos binaryDataMode: filesystem y binaryDataMode: database.

Lo que he intentado hasta ahora:

  1. Windows nativo: Dirigido a carpetas locales (C:\n8n\poema.json) y rutas temporales. Obtuve el error “not writable”.
  2. Docker (Usuario Estándar): Volumen montado -v c:/n8n:/data y dirigido a /data/poema.json. Falla.
  3. Ruta aislada de Docker: Intenté escribir directamente en rutas nativas del contenedor Docker como /tmp/poema.json y /home/node/poema.json. Falla con el mismo error exacto.
  4. Precrear el archivo: Creé manualmente un archivo vacío poema.json (0 KB) dentro de la carpeta de destino para verificar si era un problema de creación vs actualización. Aún lanza “not writable”.
  5. Usuario root de Docker: Recreé el contenedor forzando el usuario root (-u root) para eludir posibles conflictos de permisos de host/contenedor en el volumen montado. El comportamiento persiste.

Rastro de Error:

{
  "errorMessage": "The file \"/data/poema.json\" is not writable.",
  "errorDetails": {
    "rawErrorMessage": [
      "The file \"/data/poema.json\" is not writable."
    ]
  },
  "n8nDetails": {
    "nodeName": "Read/Write Files from Disk",
    "nodeType": "n8n-nodes-base.readWriteFile",
    "nodeVersion": 1.1,
    "operation": "write",
    "itemIndex": 0,
    "n8nVersion": "2.26.4 (Self Hosted)",
    "stackTrace": [
      "NodeApiError: The file \"/data/poema.json\" is not writable.",
      "    at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Files/ReadWriteFile/actions/write.operation.ts:130:10)"
    ]
  }
}
Dado que esto ocurre incluso dentro de /tmp/ dentro de un contenedor ejecutándose como root, parece ser un falso negativo en la lógica de validación interna del nodo (específicamente alrededor de write.operation.ts:130).
¿Es esta una regresión conocida en v2.26.x o hay alguna variable de entorno específica que deba ajustar para arreglar esta verificación de validación?
¡Gracias de antemano por tu ayuda!

## ¿Cuál es el mensaje de error (si hay alguno)?

{
"errorMessage": "The file \"/data/poema.json\" is not writable.",
"errorDetails": {
"rawErrorMessage": [
"The file \"/data/poema.json\" is not writable."
]
},
"n8nDetails": {
"nodeName": "Read/Write Files from Disk",
"nodeType": "n8n-nodes-base.readWriteFile",
"nodeVersion": 1.1,
"operation": "write",
"itemIndex": 0,
"n8nVersion": "2.26.4 (Self Hosted)",
"stackTrace": [
"NodeApiError: The file \"/data/poema.json\" is not writable.",
"    at ExecuteContext.execute (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-nodes-base@file+packages+nodes-base\_@aws-sdk+credential-providers@3.808.0_asn1.js@5_8da18263ca0574b0db58d4fefd8173ce/node_modules/n8n-nodes-base/nodes/Files/ReadWriteFile/actions/write.operation.ts:130:10)"
]
}
}

## Por favor, comparte tu flujo de trabajo

El flujo de trabajo es una estructura simple de 3 nodos:
HTTP Request ➡️ Convert to File ➡️ Read/Write Files from Disk (operación Write).

El nodo Convert to File genera datos binarios exitosamente (aproximadamente 27.5 kB), pero la ejecución se detiene completamente en el nodo Read/Write Files from Disk.

## Comparte el resultado devuelto por el último nodo

Estoy enfrentando un problema persistente con el nodo Read/Write Files from Disk (v1.1) al intentar ejecutar una operación "Write File to Disk". Consistentemente lanza el error "is not writable", independientemente de la carpeta, permisos de usuario o modo de ejecución.
Lo que he intentado hasta ahora para aislar el problema:
1. Windows nativo: Dirigido a carpetas locales (C:\n8n\poema.json) y rutas temporales. Obtuve el error.
2. Docker (Usuario Estándar): Volumen montado -v c:/n8n:/data y dirigido a /data/poema.json. Falla.
3. Ruta aislada de Docker: Intenté escribir directamente en rutas nativas del contenedor Docker como /tmp/poema.json y /home/node/poema.json. Falla con el mismo error exacto.
4. Precrear el archivo: Creé manualmente un archivo vacío poema.json (0 KB) dentro de la carpeta de destino para verificar si era un problema de creación vs actualización. Aún lanza "not writable".
5. Usuario root de Docker: Recreé el contenedor forzando el usuario root (-u root) para eludir posibles conflictos de permisos de host/contenedor en el volumen montado. El comportamiento persiste.
Dado que esto ocurre incluso dentro de /tmp/ dentro de un contenedor ejecutándose como root, parece ser un falso negativo en la lógica de validación interna del nodo (específicamente alrededor de write.operation.ts:130).

## Información sobre tu configuración de n8n

* **Versión n8n:**
* **Base de Datos (predeterminado: SQLite):**
* **Configuración n8n EXECUTIONS_PROCESS (predeterminado: own, main):**
* **Ejecutando n8n a través de (Docker, npm, n8n cloud, aplicación de escritorio):**
* **Sistema operativo:**


* Versión n8n: 2.26.4 (Auto alojado)
* Base de Datos: SQLite (predeterminado)
* Modo de Ejecución: Regular (y probado a través de Docker / backend WSL2)
* Modo de Datos Binarios: database (también probado con filesystem)

@uidb4056 gran aislamiento, señala directamente la causa: esto no es un problema de permisos del SO, es la propia puerta de control de acceso a archivos de n8n. La v2.0 incluyó un cambio incompatible que bloquea el acceso al sistema de archivos para el nodo Read/Write Files, por lo que bloquea la escritura antes de que el SO la vea. Por eso root, 777, /tmp y un manual touch no cambian nada, es una lista de permitidos a nivel de aplicación, no un permiso del sistema de archivos.

La variable de entorno que necesitas es N8N_RESTRICT_FILE_ACCESS_TO, establécela en tu directorio destino (separado por punto y coma para múltiples), por ejemplo /data, luego reinicia n8n. También verifica que la ruta no esté bloqueada por N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES (activada por defecto, bloquea .n8n).

Si aún así falla, es la regresión conocida de 2.x (GitHub #23318 / #24829), y la solución es usar el nodo Execute Command, que escribe sin problemas donde este nodo se niega.

Además de lo que achamm ha mencionado, si se trata de múltiples directorios entonces la variable de entorno anterior no funcionará. Entonces necesitarás configurarlo de esta manera:

N8N_RESTRICT_FILE_ACCESS_TO: ""

Escenario A: Si estás escribiendo texto sin formato o datos JSON

Pasa los datos dinámicamente usando expresiones:

Bash

echo '{{ JSON.stringify($json) }}' > /data/poema.json

(O apunta a tu propiedad específica, por ejemplo, {{ $json.myText }})

Escenario B: Si estás manejando datos binarios

Si el contenido del archivo proviene de un nodo anterior como un objeto binario, puedes escribir el flujo binario directamente en disco usando comandos de shell estándar:

Bash

cat {{ $binary.data }} > /data/poema.json

Esto funciona como una solución sólida e infalible mientras esperas un parche en la lógica de validación principal del nodo readWriteFile.

Hola @achamm,

¡Muchas gracias! ¡Lo clavaste!

EL problema era efectivamente la restricción a nivel de aplicación introducida en v2.x. Recrear el contenedor de Docker con las variables de entorno que proporcionaste resolvió el problema completamente:

-e N8N_RESTRICT_FILE_ACCESS_TO=/data -e N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES=false

Una vez que se configuraron esas variables, el nodo Read/Write funcionó perfectamente dentro del volumen montado sin ningún error de permisos. ¡Marcado como solución!

¡De nada! ¡Feliz de ayudar!