Weird error withcomplain on Chrome in my container

Hi,

I’m playing with N8N and installed it as a Docker container for testing my workflows. The first one imposes work with Pupeteer, so I have to describe it in my Dockerfile like this

FROM n8nio/n8n:latest-debian

# Switch to root to install packages
USER root

# Install Chromium on Debian
RUN apt-get update && apt-get install -y \
    chromium \
    chromium-driver \
    fonts-liberation \
    libasound2 \
    libatk-bridge2.0-0 \
    libatk1.0-0 \
    libcups2 \
    libdbus-1-3 \
    libdrm2 \
    libgbm1 \
    libgtk-3-0 \
    libnspr4 \
    libnss3 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxkbcommon0 \
    libxrandr2 \
    xdg-utils \
    --no-install-recommends \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Set environment variable for Puppeteer to find Chrome
# ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
# ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_CHROMIUM_REVISION=148.0.7778.97
ENV PUPPETEER_PRODUCT=chrome
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable

# Create cache directory for Puppeteer with proper permissions
RUN mkdir -p /home/node/.cache/puppeteer && \
    chown -R node:node /home/node/.cache

# Switch back to node user
USER node

# Install Puppeteer community node (if needed)
RUN cd /home/node/.n8n && \
    npm install n8n-nodes-puppeteer

Ok, also I use Docker-compose

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n-main
    environment:
      - N8N_SECURE_COOKIE=false
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - WEBHOOK_URL=http://localhost:5678
      # Task Runner configuration
      - N8N_RUNNERS_ENABLED=true
      - N8N_RUNNERS_MODE=external
      - N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
      - N8N_RUNNERS_AUTH_TOKEN=your-secret-token-here-change-me
      - N8N_NATIVE_PYTHON_RUNNER=true
    ports:
      - "5678:5678"
    volumes:
      - n8n_data:/home/node/.n8n
    restart: unless-stopped
    depends_on:
      - task-runners

  task-runners:
    image: n8nio/runners:latest
    container_name: n8n-runners
    environment:
      - N8N_RUNNERS_AUTH_TOKEN=your-secret-token-here-change-me
      - N8N_RUNNERS_TASK_BROKER_URI=http://n8n-main:5679
      - N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=15
    restart: unless-stopped

volumes:
  n8n_data:

Now if I try to run this container and execute first step via web UI in my workflow I get this error

Failed to launch local browser: Could not find Chrome (ver. 148.0.7778.97). This can occur if either 1. you did not perform an installation before running the script (e.g. npx puppeteer browsers install chrome) or 2. your cache path is incorrectly configured (which is: /home/node/.cache/puppeteer). For (2), check out our guide on configuring puppeteer at https://pptr.dev/guides/configuration.. Check executablePath ('auto-detect') or ensure Chromium is installed.

Could someone tell me how to have it fixed?

This is part of your error message. Looks like this should be in a RUN instruction in your Dockerfile as well.
It has a couple of suggestions of what could be the issue.

If this is not the fix, then you will need to wait for someone who actually uses n8n and uses puppeteer with Chrome.

Ok, I added these lines instead of existing RUN into my Dockerfile
RUN cd /home/node/.n8n &&
npm install n8n-nodes-puppeteer &&
npx puppeteer browsers install chrome

but nothing new happes, the same error with complain on no chromium. How should I add Chrome or Chromium in my Dockerfile then?

You shared what you did. Good. Now the part that is missing, is to share the exact error message you get.

Ok, the log in the container with n8n looks like this:

2026-06-22 18:54:03.795 | Initializing n8n process
2026-06-22 18:54:04.658 | Puppeteer node: Container detected via .dockerenv file
2026-06-22 18:54:05.746 | n8n ready on ::, port 5678
2026-06-22 18:54:05.784 | n8n Task Broker ready on 0.0.0.0, port 5679
2026-06-22 18:54:05.836 | Deprecation warning: The storage directory “/home/node/.n8n/binaryData” will be renamed to “/home/node/.n8n/storage” in n8n v3. To migrate now, set N8N_MIGRATE_FS_STORAGE_PATH=true. If you have a volume mounted at the old path, update your mount configuration after migration.
2026-06-22 18:54:05.908 |
2026-06-22 18:54:05.908 | There is a deprecation related to your environment variables. Please take the recommended actions to update your configuration:
2026-06-22 18:54:05.908 | - N8N_RUNNERS_ENABLED → Remove this environment variable; it is no longer needed.
2026-06-22 18:54:05.908 |
2026-06-22 18:54:05.972 | [license SDK] Skipping renewal on init: license cert is not due for renewal
2026-06-22 18:54:08.652 | Registered runner “launcher-python” (c74b6097644e91d6)
2026-06-22 18:54:08.652 | Registered runner “launcher-javascript” (26808f641e6021aa)
2026-06-22 18:54:09.421 | Instance registered
2026-06-22 18:54:09.437 | Discovered 4 cluster checks
2026-06-22 18:54:09.552 | Recorded version change: 2.26.7 → 2.26.9
2026-06-22 18:54:10.523 | Version: 2.26.9
2026-06-22 18:54:10.533 | Building workflow dependency index…
2026-06-22 18:54:10.560 | [PostHog] sendFeatureFlags is deprecated and will be removed in a future major version. Pass a flags snapshot from posthog.evaluateFlags(…) instead — it avoids a second /flags request per capture and guarantees the event carries the exact flag values your code branched on.
2026-06-22 18:54:10.633 |
2026-06-22 18:54:10.633 | Editor is now accessible via:
2026-06-22 18:54:10.633 | http://localhost:5678
2026-06-22 18:54:10.634 | Finished building workflow dependency index. Processed 0 draft workflows, 0 published workflows.
2026-06-22 19:07:05.238 | (node:8) [DEP0060] DeprecationWarning: The util._extend API is deprecated. Please use Object.assign() instead.
2026-06-22 19:07:05.239 | (Use node --trace-deprecation … to show where the warning was created)
2026-06-22 19:07:24.483 | Puppeteer node - Browser launch configuration: {
2026-06-22 19:07:24.483 | “hasBrowserWSEndpoint”: false,
2026-06-22 19:07:24.483 | “browserWSEndpointValue”: “(empty)”,
2026-06-22 19:07:24.483 | “browserWSEndpointSource”: “none”,
2026-06-22 19:07:24.483 | “hasExecutablePath”: false,
2026-06-22 19:07:24.483 | “executablePathValue”: “(default)”,
2026-06-22 19:07:24.483 | “stealth”: false,
2026-06-22 19:07:24.483 | “humanTyping”: false
2026-06-22 19:07:24.484 | }
2026-06-22 19:07:24.484 | Puppeteer node: Launching local browser
2026-06-22 19:07:24.564 | Error
2026-06-22 19:07:24.565 | Error
2026-06-22 19:07:24.565 | at ExecuteContext.execute (/home/node/.n8n/nodes/node_modules/@wtyeung/n8n-nodes-puppeteer/nodes/Puppeteer/Puppeteer.node.ts:746:10)
2026-06-22 19:07:24.565 | at WorkflowExecute.executeNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1053:8)
2026-06-22 19:07:24.565 | at WorkflowExecute.runNode (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1327:11)
2026-06-22 19:07:24.565 | at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:1778:27
2026-06-22 19:07:24.565 | at /usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_@opentelemetry+api@1.9.0_@opentelemetry+exporter-trace-otlp_cf5896492347c4895f0373f4acc773d7/node_modules/n8n-core/src/execution-engine/workflow-execute.ts:2474:11
2026-06-22 19:07:24.565 |

What’s wrong with the container now?

The error message isn’t really telling what’s wrong. Like I wrote earlier you will need to wait for someone who actually uses n8n with puppeteer and Chrome.

The core of the problem is not really Docker or container specific, it is specific to the application you want to run inside a container. I can only assume that you will find more users in the n8n community forum that use this particular setup, than in the docker forum.