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
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.
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?
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 |
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.