Migration Report shows Remove task runner even though I've used external task runner

Describe the problem/error/question

I am using Coolify to deploy N8N with Docker Compose. I migrated to stable release. I tried the latest Python native code node with an external task runner & it seems to be working correctly. But the n8n migration report still says:

Remove task runner from n8nio/n8n docker image

I need help with whether I made some mistake while deploying the task runner or if this is showing by default to everyone?

If I’ve done something wrong, please suggest the correct way to deploy. Thanks in advance!

Here’s the compose YAML I’m using:

name: n8n
services:
  n8n:
    depends_on:
      postgresql:
        condition: service_healthy
        required: true
    environment:
      CODE_ENABLE_STDOUT: "true"
      DB_LOGGING_ENABLED: "true"
      DB_LOGGING_OPTIONS: info
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_HOST: postgresql
      DB_POSTGRESDB_PASSWORD: n8n
      DB_POSTGRESDB_PORT: "5432"
      DB_POSTGRESDB_SCHEMA: public
      DB_POSTGRESDB_USER: root
      DB_TYPE: postgresdb
      EXECUTIONS_DATA_MAX_AGE: "100"
      EXECUTIONS_DATA_SAVE_ON_ERROR: all
      EXECUTIONS_DATA_SAVE_ON_PROGRESS: "true"
      EXECUTIONS_DATA_SAVE_ON_SUCCESS: none
      EXECUTIONS_TIMEOUT: "3600"
      EXECUTIONS_TIMEOUT_MAX: "7200"
      GENERIC_TIMEZONE: Asia/Kolkata
      N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
      N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES: "true"
      N8N_DEFAULT_BINARY_DATA_MODE: database
      N8N_DIAGNOSTICS_ENABLED: "false"
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
      N8N_GIT_NODE_DISABLE_BARE_REPOS: "true"
      N8N_HIRING_BANNER_ENABLED: "false"
      N8N_LOG_FILE_COUNT_MAX: "250"
      N8N_LOG_FILE_SIZE_MAX: "25"
      N8N_LOG_OUTPUT: file
      N8N_METRICS: "true"
      N8N_METRICS_INCLUDE_CACHE_METRICS: "true"
      N8N_NATIVE_PYTHON_RUNNER: "true"
      N8N_PERSONALIZATION_ENABLED: "false"
      N8N_PREVIEW_MODE: "true"
      N8N_PYTHON_ENABLED: "true"
      N8N_REINSTALL_MISSING_PACKAGES: "true"
      N8N_RUNNERS_AUTH_TOKEN: n8n
      N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
      N8N_RUNNERS_BROKER_LISTEN_PORT: "5679"
      N8N_RUNNERS_MODE: external
      N8N_SKIP_AUTH_ON_OAUTH_CALLBACK: "false"
      N8N_TEMPLATES_ENABLED: "false"
      N8N_VERSION_NOTIFICATIONS_ENABLED: "true"
      NODE_FUNCTION_ALLOW_BUILTIN: "*"
      NODE_FUNCTION_ALLOW_EXTERNAL: "*"
      TZ: Asia/Kolkata
    expose:
      - "5678"
      - "5679"
    healthcheck:
      test:
        - CMD-SHELL
        - wget -qO- http://127.0.0.1:5678/
      timeout: 20s
      interval: 5s
      retries: 10
    image: n8nio/n8n:stable
    networks:
      default: null
    ports:
      - mode: ingress
        target: 5678
        published: "5678"
        protocol: tcp
    volumes:
      - type: volume
        source: n8n-data
        target: /home/node/.n8n
        volume: {}
  n8n-task-runners:
    depends_on:
      n8n:
        condition: service_started
        required: true
    environment:
      N8N_RUNNERS_AUTH_TOKEN: n8n
      N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
    image: n8nio/runners:stable
    networks:
      default: null
  postgresql:
    environment:
      POSTGRES_DB: n8n
      POSTGRES_PASSWORD: n8n
      POSTGRES_USER: root
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}
      timeout: 20s
      interval: 5s
      retries: 10
    image: postgres:16-alpine
    networks:
      default: null
    volumes:
      - type: volume
        source: postgresql-data
        target: /var/lib/postgresql/data
        volume: {}
networks:
  default:
    name: n8n_default
volumes:
  n8n-data:
    name: n8n_n8n-data
  postgresql-data:
    name: n8n_postgresql-data

Information on your n8n setup

  • n8n version: 2.0.3
  • Database: Postgresql
  • n8n EXECUTIONS_PROCESS setting: default: own,
  • Running n8n via Docker Compose
  • Operating system: Ubuntu

Hey @KServe-FMS Welcome to the community!

I did a quick dive into the codebase and it seems this rule is hardcoded to always be true unless n8n is running in the cloud: n8n/packages/cli/src/modules/breaking-changes/rules/v2/task-runner-docker-image.rule.ts at master · n8n-io/n8n · GitHub

Possibly okay to ignore for now and wait for the update. My suspicion is that this rule will be deprecated soon?