Feature Description
When using the external task runner (n8nio/runners), the NODE_FUNCTION_ALLOW_BUILTIN environment variable set on the container is silently ignored. The runner launcher binary reads /etc/n8n-task-runners.json which contains env-overrides that hardcode NODE_FUNCTION_ALLOW_BUILTIN=crypto, completely overriding any container-level environment variable.
The only way to change the allowed modules is to volume-mount a patched /etc/n8n-task-runners.json — which is fragile and breaks on version updates.
Current behavior
# docker-compose.yml — this does NOT work
n8n-runner:
image: n8nio/runners:2.14.2
environment:
- NODE_FUNCTION_ALLOW_BUILTIN=fs,path,crypto # ← silently ignored
The launcher reads /etc/n8n-task-runners.json which has:
"env-overrides": {
"NODE_FUNCTION_ALLOW_BUILTIN": "crypto"
}
This override takes precedence, and NODE_FUNCTION_ALLOW_BUILTIN is not in the allowed-env list, so the container env var is never passed through to the spawned Node.js process.
Expected behavior
Container-level NODE_FUNCTION_ALLOW_BUILTIN should be respected, either by:
- Adding it to the
allowed-env list in the default config, or
- Making
env-overrides lower priority than container env vars, or
- Providing an env var like
N8N_RUNNERS_ALLOWED_BUILTIN_MODULES that the launcher binary reads directly
This would allow users to configure allowed modules without editing internal config files.
Current workaround
Volume-mount a patched config:
volumes:
- ./patches/n8n-task-runners.json:/etc/n8n-task-runners.json:ro
This is the same workaround other users have reported in related issues.
Related issues
This is a recurring pain point — multiple issues have been filed and closed:
All were closed as "working as designed" (must edit JSON config), but the feedback from users is consistent: the JSON override approach is fragile, undocumented in the quick-start guides, and breaks on image updates.
Debug Info
- n8nVersion: 2.14.2
- runner image: n8nio/runners:2.14.2
- platform: docker (self-hosted)
- database: PostgreSQL
Operating System
Linux (Debian 12)
n8n Version
2.14.2
Hosting
self hosted
Feature Description
When using the external task runner (
n8nio/runners), theNODE_FUNCTION_ALLOW_BUILTINenvironment variable set on the container is silently ignored. The runner launcher binary reads/etc/n8n-task-runners.jsonwhich containsenv-overridesthat hardcodeNODE_FUNCTION_ALLOW_BUILTIN=crypto, completely overriding any container-level environment variable.The only way to change the allowed modules is to volume-mount a patched
/etc/n8n-task-runners.json— which is fragile and breaks on version updates.Current behavior
The launcher reads
/etc/n8n-task-runners.jsonwhich has:This override takes precedence, and
NODE_FUNCTION_ALLOW_BUILTINis not in theallowed-envlist, so the container env var is never passed through to the spawned Node.js process.Expected behavior
Container-level
NODE_FUNCTION_ALLOW_BUILTINshould be respected, either by:allowed-envlist in the default config, orenv-overrideslower priority than container env vars, orN8N_RUNNERS_ALLOWED_BUILTIN_MODULESthat the launcher binary reads directlyThis would allow users to configure allowed modules without editing internal config files.
Current workaround
Volume-mount a patched config:
This is the same workaround other users have reported in related issues.
Related issues
This is a recurring pain point — multiple issues have been filed and closed:
N8N_RUNNERS_STDLIB_ALLOW="*"has no effectN8N_RUNNERS_STDLIB_ALLOWnot working when setN8N_RUNNERS_STDLIB_ALLOW=*and blocks ALL importsAll were closed as "working as designed" (must edit JSON config), but the feedback from users is consistent: the JSON override approach is fragile, undocumented in the quick-start guides, and breaks on image updates.
Debug Info
Operating System
Linux (Debian 12)
n8n Version
2.14.2
Hosting
self hosted