Describe the problem/error/question
After upgrading to n8n v2.2.3 (from v1.x), my workflows that use the Execute Command node no longer work: publishing fails and activation is impossible.
- When I click Publish, I get:
Problem activating workflow — The following error occurred on workflow activationWorkflow could not be published: Unrecognized node type: n8n-nodes-base.executeCommand
The same workflow worked fine on v1.x.
What I understand / what I’m looking for
- In v2, certain sensitive nodes are disabled by default (including Execute Command) and must be explicitly re‑enabled via configuration.
- I’m looking for the exact Docker settings to re‑enable only Execute Command (ideally without enabling other nodes), and the best practices when running workers (queue/scaling) to avoid version mismatch errors after an upgrade.
Questions:
- Can you confirm the v2 behavior (Execute Command node disabled by default)?
- What is the recommended Docker configuration to allow only this node (rather than enabling all of them)?
- Do I need to redeploy/update the workers explicitly to avoid the “Unrecognized node type” error when the main instance and workers run different image tags?
What is the error message (if any)?
Problem activating workflow
The following error occurred on workflow activation:
Workflow could not be published:
Unrecognized node type: n8n-nodes-base.executeCommand
Please share your workflow
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
Share the output returned by the last node
Information on your n8n setup
- n8n version: 2.2.3 (self‑hosted)
- Database : Postgres
- n8n EXECUTIONS_PROCESS setting (default: own, main): <please specify: own/main/queue/scaling + workers if applicable>
- Running n8n via (Docker, npm, n8n cloud, desktop app): Docker
- Operating system: Debian 13
(Optional) Current/expected docker-compose.yml
volumes:
n8n_storage:
n8n_files:
x-n8n: &service-n8n
image: n8nio/n8n:latest
environment:
# --- Base de données ---
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- DB_POSTGRESDB_DATABASE=postgres
# --- Sécurité / Configuration ---
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_PERSONALIZATION_ENABLED=false
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_USER_MANAGEMENT_JWT_SECRET=${N8N_USER_MANAGEMENT_JWT_SECRET}
# --- Performance / Gros fichiers ---
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_BINARY_DATA_TTL=86400
- NODE_OPTIONS=--max-old-space-size=18192
# --- Exécutions via Redis Queue ---
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
# si ton container Redis a un mot de passe :
# - QUEUE_BULL_REDIS_PASSWORD=ton_mdp
#- WEBHOOK_URL=${N8N_HOSTNAME:+https://}${N8N_HOSTNAME:-http://localhost:5678}
- WEBHOOK_URL=https://domaine.fr
- N8N_BINARY_DATA_STORAGE_PATH=/files
services:
n8n:
<<: *service-n8n
container_name: n8n
restart: unless-stopped
expose:
- 5678/tcp
volumes:
- n8n_storage:/home/node/.n8n
- n8n_files:/files
- ./n8n/backup:/backup
- ./shared:/data/shared
n8n-worker:
image: n8nio/n8n:latest
restart: unless-stopped
depends_on:
- redis
- postgres
environment:
# --- Base de données ---
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- DB_POSTGRESDB_DATABASE=postgres
# --- Sécurité / Configuration ---
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_PERSONALIZATION_ENABLED=false
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_USER_MANAGEMENT_JWT_SECRET=${N8N_USER_MANAGEMENT_JWT_SECRET}
# --- Performance / Gros fichiers ---
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_BINARY_DATA_TTL=86400
- NODE_OPTIONS=--max-old-space-size=18192
# --- Exécutions via Redis Queue ---
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- N8N_BINARY_DATA_STORAGE_PATH=/files
# si ton container Redis a un mot de passe :
# - QUEUE_BULL_REDIS_PASSWORD=ton_mdp
command: worker
volumes:
- n8n_storage:/home/node/.n8n
- n8n_files:/files
- ./n8n/backup:/backup
- ./shared:/data/shared
postgres:
image: postgres:${POSTGRES_VERSION:-latest}
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 3s
timeout: 3s
retries: 10
expose:
- 5432/tcp
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: postgres
volumes:
#- langfuse_postgres_data:/var/lib/postgresql/data
- langfuse_postgres_data:/var/lib/postgresql/data2
redis:
container_name: redis
image: docker.io/valkey/valkey:8-alpine
command: valkey-server --save 30 1 --loglevel warning
restart: unless-stopped
expose:
- 6379/tcp
volumes:
- valkey-data:/data
cap_drop:
- ALL
cap_add:
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 3s
timeout: 10s
retries: 10



