Thanks a lot for your previews response, but it doesn’t work.
I made some edits to files but… ( I wrote \ because the response here I can’t put links so it doesn’t recognize with ), and sorry for my english.
Problem running external task runners (v2.6.3): launcher keeps requesting Python runner even with JavaScript-only config
I’m trying to set up external task runners with n8n 2.6.3 and the n8nio/runners:2.6.3 image, extended to add Puppeteer and related packages for JavaScript Code nodes.
The goal is:
-
n8n
2.6.3as the main instance (broker) -
a single external runners container (JavaScript only, no Python)
-
custom
n8n-task-runners.jsonthat allowlists Puppeteer packages
However, the runners container keeps crashing with this error:
ERROR Failed to load config: config file at /etc/n8n-task-runners.json does not contain requested runner type: python
Even though my config only defines a JavaScript runner.
Current setup
n8n service (docker-compose)
`n8n:
image: \docker.n8n.io/n8nio/n8n:2.6.3
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
- N8N_HOST=${N8N_DOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_SECURE_COOKIE=true
- N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- WEBHOOK_URL=\https://${N8N_DOMAIN}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${TZ}
- NODE_ENV=production
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
# Task runners (external mode)
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=external
- N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
- N8N_RUNNERS_AUTH_TOKEN=${N8N_RUNNERS_AUTH_TOKEN}
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
mongodb:
condition: service_healthy
networks:
- n8n-network
expose:
- 5678`
task-runners service (docker-compose)
task-runners: build: context: . dockerfile: Dockerfile.runners container_name: n8n-runners environment: - N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679 - N8N_RUNNERS_AUTH_TOKEN=${N8N_RUNNERS_AUTH_TOKEN} - N8N_RUNNERS_LAUNCHER_HEALTH_CHECK_PORT=5680 - N8N_RUNNERS_RUNNER_TYPE=javascript volumes: - ./n8n-task-runners.json:/etc/n8n-task-runners.json depends_on: - n8n
So:
-
N8N_RUNNERS_TASK_BROKER_URIuseshttp://and points to then8nservice on port5679, as per the docs for external mode. -
The same
N8N_RUNNERS_AUTH_TOKENis used in bothn8nandtask-runners. [Task runners external; Task runner env vars]
Dockerfile for runners
`FROM n8nio/runners:2.6.3
USER root
JS runner: install Puppeteer and related packages
RUN cd /opt/runners/task-runner-javascript &&
pnpm add puppeteer-extra puppeteer puppeteer-core @\ghostery/adblocker-puppeteer
Custom config for runners
COPY n8n-task-runners.json /etc/n8n-task-runners.json
USER runner`
This follows the pattern from the docs for extending n8nio/runners and adding extra dependencies. [Adding extra deps]
n8n-task-runners.json
{ "task-runners": [ { "runner-type": "javascript", "env-overrides": { "NODE_FUNCTION_ALLOW_BUILTIN": "*", "NODE_FUNCTION_ALLOW_EXTERNAL": "puppeteer-extra,puppeteer,puppeteer-core,@ghostery/adblocker-puppeteer", "N8N_RUNNERS_ALLOW_PROTOTYPE_MUTATION": "true" } } ] }
So there is only a JavaScript runner defined, no Python runner at all.
What I already tried
- Initially I had both JavaScript and Python runners defined in
n8n-task-runners.json.
The launcher then complained about:
runner python: health-check-server-port is required with multiple runners
-
Since I only need JavaScript, I removed the Python block from
n8n-task-runners.json, leaving only the JavaScript runner (as shown above). -
After that, the error changed to:
ERROR Failed to load config: config file at /etc/n8n-task-runners.json does not contain requested runner type: python
-
Based on a community thread, I added
N8N_RUNNERS_RUNNER_TYPE=javascriptto thetask-runnersservice, to explicitly tell the launcher to use the JavaScript runner type. [Runner type thread] -
I rebuilt and restarted everything with:
docker compose down docker compose up -d --build
- Despite this, the
n8n-runnerscontainer still exits immediately, anddocker compose logs -f task-runnersalways shows:
ERROR Failed to load config: config file at /etc/n8n-task-runners.json does not contain requested runner type: python
- Because the container exits right away, I can’t easily
docker execinto it to inspect environment variables, but the compose file clearly setsN8N_RUNNERS_RUNNER_TYPE=javascript.
What I’m asking for
I would really appreciate help understanding:
- Why the launcher in
n8nio/runners:2.6.3is still requesting apythonrunner type, even though:
-
N8N_RUNNERS_RUNNER_TYPE=javascriptis set on the runners container, and -
n8n-task-runners.jsononly defines arunner-type: "javascript".
- Whether there is:
-
a different or updated way to configure “JavaScript-only” runners in v2.6.3,
-
or any additional environment variables or flags that must be set to avoid the launcher defaulting to
python.
- If this might be a bug or regression in the task-runner launcher for v2.6.3, and if there is a recommended workaround.
My main goal is simply to have:
-
n8n 2.6.3 in external runners mode,
-
a single runners container with JavaScript only,
-
Puppeteer and related packages available in the Code node via the external runners.
Thank you very much in advance for any guidance or examples you can share.