Task request timed out after 60 seconds

Still doesn’t seem to work…

Please can you share your workflow in a code block. Im suspecting you have not followed the guide on the breaking changes in python

Thanks Wouter, I’m using n8n v2.2.3 with Ubuntu. I used your config, but unfortunately both JavaScript and Python code nodes are timing out.

So this looks more like a container/env config error. Both the n8n-main and n8n-runners containers are up:

CONTAINER ID                                                       IMAGE                                                                     COMMAND                                                           CREATED          STATUS                    PORTS                                         NAMES
bae921856c14db8bce853d7e1cd7c82859b447f4e4cdb8359f87e64905270622   n8nio/runners:latest                                                      "tini -- /usr/local/bin/task-runner-launcher javascript python"   10 minutes ago   Up 10 minutes             5680/tcp                                      n8n-runners
078b7edcd2c51533ade72f6ce6fe04335fb60eab7c223ebcd3dfc2979871c3f0   n8nio/n8n:latest                                                          "tini -- /docker-entrypoint.sh"                                   15 minutes ago   Up 15 minutes             0.0.0.0:5678->5678/tcp, [::]:5678->5678/tcp   n8n-main

The n8n-main container is on ports "5678:5678". The runners broker listen address is 0.0.0.0, and the runner task broker URI is http://n8n-main:5679. I also added the volume for the runner container.

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-main
    volumes:
      - ./n8n_data:/home/node/.n8n
    ports:
      - "5678:5678"
    environment:
      # Task runner configuration for v2 (external mode)
      - N8N_RUNNERS_ENABLED=true
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
      - N8N_RUNNERS_AUTH_TOKEN=your-secret-here

  task-runners:
    image: n8nio/runners:latest
    container_name: n8n-runners
    volumes:
      - ./n8n_data:/home/node/.n8n
    environment:
      # Task runner configuration
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_TASK_BROKER_URI=http://n8n-main:5679
      - N8N_RUNNERS_AUTH_TOKEN=your-secret-here
      # Enable Python and JavaScript support
      - N8N_RUNNERS_ENABLED_TASK_TYPES=javascript,python
      # Auto shutdown after 15 seconds of inactivity
      - N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15
    depends_on:
      - n8n

Are there any network/VPN/container related issues that could prevent access to the runner container?

Try naming the service name from '“n8n” to “n8n-main”. I think this might be the issue.

My VPN was just preventing hostname resolution, which caused the task runners to be stuck waiting. I specified the proxy explicitly and now both python and javascript work well.

services:
  n8n-main:
    image: n8nio/n8n:latest
    container_name: n8n-main
    networks:
      - n8n-network
    volumes:
      - ./n8n_data:/home/node/.n8n
    ports:
      - "5678:5678"
    environment:
      # Task runner configuration for v2 (external mode)
      - N8N_RUNNERS_ENABLED=true
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
      - N8N_RUNNERS_AUTH_TOKEN=your-secret-here
      # Proxy configuration for external traffic
      - HTTP_PROXY=http://host.docker.internal:17890
      - HTTPS_PROXY=http://host.docker.internal:17890
      - NO_PROXY=localhost,127.0.0.1,n8n-main,task-runners
    extra_hosts:
      - "host.docker.internal:host-gateway"

  task-runners:
    image: n8nio/runners:latest
    container_name: n8n-runners
    networks:
      - n8n-network
    volumes:
      - ./n8n_data:/home/node/.n8n
    environment:
      # Task runner configuration
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_TASK_BROKER_URI=http://n8n-main:5679
      - N8N_RUNNERS_AUTH_TOKEN=your-secret-here
      # Enable Python and JavaScript support
      - N8N_RUNNERS_ENABLED_TASK_TYPES=javascript,python
      # Auto shutdown after 15 seconds of inactivity
      - N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15
      # Proxy configuration for external traffic
      - HTTP_PROXY=http://host.docker.internal:17890
      - HTTPS_PROXY=http://host.docker.internal:17890
      - NO_PROXY=localhost,127.0.0.1,n8n-main,task-runners
    extra_hosts:
      - "host.docker.internal:host-gateway"
    depends_on:
      - n8n-main

networks:
  n8n-network:
    driver: bridge

I was able to resolve it for myself as well. I added both the main and runner to the same n8n network.

compose.yml below:

services:

  n8n-main:
    image: n8nio/n8n:latest
    container_name: n8n-main
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=<redacted>
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=<redacted>
      - N8N_BASIC_AUTH_PASSWORD=<redacted>
      - NODE_ENV=production
      - WEBHOOK_URL=https://<redacted>
      - N8N_PROXY_HOPS=1
      - N8N_RESTRICT_FILE_ACCESS_TO=/files
      - N8N_PAYLOAD_SIZE_MAX=1024
      - N8N_RUNNERS_ENABLED=true
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
      - N8N_RUNNERS_AUTH_TOKEN=<redacted>
    volumes:
      - ~/.n8n:/home/node/.n8n
      - ~/n8n/files:/files
    networks:
      - n8n_network

  task-runners:
    image: n8nio/runners:latest
    container_name: n8n-runners
    restart: always
    environment:
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_AUTH_TOKEN=<redacted>
      - N8N_RUNNERS_TASK_BROKER_URI=http://n8n-main:5679
      - N8N_RUNNERS_ENABLED_TASK_TYPES=javascript,python
      - N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15
    volumes:
      - ~/.n8n:/home/node/.n8n
    depends_on:
      - n8n-main
    networks:
      - n8n_network

networks:
  n8n_network:
    driver: bridge 

OP, try adding this inside your task-runners service.

networks:
   - n8n_network