docker小白自存-windows系统通过docker安装n8n-nodes-puppeteer

发布于:2025-06-29 ⋅ 阅读:(23) ⋅ 点赞:(0)

n8n上直接在社区下载puppeteer节点,使用时会报错说没有chromium依赖。
找到了n8n-nodes-puppeteer的github试图解决
根据他的docker安装指南执行,运行容器时会报exec /docker-custom-entrypoint.sh: no such file or directory (明明文件都有

后面根据deepseek(谢谢d老师)改了一下dockerfile文件成功了
原因:

  • Windows换行符问题:Windows使用CRLF换行符,而Linux需要LF。这会导致脚本无法执行。
    解决方案:
  1. 把文件扔进vsode,CRLF换成LF,保存文件就ok(这个我没试过,先试的第二种)(二编:试过了不行 还是要改dockerfile内容)
  2. 改dockerfile内容,添加dos2unix工具
FROM docker.n8n.io/n8nio/n8n

USER root

# Install Chrome dependencies and Chrome
RUN apk add --no-cache \
    chromium \
    nss \
    glib \
    freetype \
    freetype-dev \
    harfbuzz \
    ca-certificates \
    ttf-freefont \
    udev \
    ttf-liberation \
    font-noto-emoji

# Tell Puppeteer to use installed Chrome instead of downloading it
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
    PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

# Install n8n-nodes-puppeteer in a permanent location
RUN mkdir -p /opt/n8n-custom-nodes && \
    cd /opt/n8n-custom-nodes && \
    npm install n8n-nodes-puppeteer && \
    chown -R node:node /opt/n8n-custom-nodes

# Copy our custom entrypoint
COPY docker-custom-entrypoint.sh /docker-custom-entrypoint.sh
RUN apk add --no-cache dos2unix && \  
	dos2unix /docker-custom-entrypoint.sh && \  
	chmod +x /docker-custom-entrypoint.sh && \
	chown node:node /docker-custom-entrypoint.sh && \
	apk del dos2unix  

USER node

ENTRYPOINT ["/docker-custom-entrypoint.sh"]

后续根据官方指南执行构建镜像:

docker build -t n8n-puppeteer -f docker/Dockerfile docker/

运行容器(我是在dockerdesktop上直接创建的没有用这个命令;n8n_data是我在dockerdesktop上建的数据卷):

docker run -it \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  n8n-puppeteer

总之最后成功了 以上
在这里插入图片描述

=============================================

【二编】后来另一台电脑安装的docker desktop版本是 4.11.1 (84025),只能命令行创建,但是使用n8n puppeteer时出现新的报错:

Failed to launch/connect to browser: Failed to launch the browser process! Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted [44:44:0627/063339.306656:FATAL:content/browser/zygote_host/zygote_host_impl_linux.cc:211] Check failed: . : Operation not permitted (1) [0627/063339.344366:WARNING:third_party/crashpad/crashpad/snapshot/linux/process_reader_linux.cc:95] sched_getscheduler: Function not implemented (38) [0627/063339.344661:WARNING:third_party/crashpad/crashpad/snapshot/linux/process_reader_linux.cc:95] sched_getscheduler: Function not implemented (38) [0627/063339.345185:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or directory (2) [0627/063339.345332:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145] open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or directory (2) TROUBLESHOOTING: https://pptr.dev/troubleshooting

定位到问题是我的win10版本是17763的,低于 Docker Desktop 要求使用 WSL2 引擎的版本 18362.1040+,“Use the WSL 2 based engine (requires Win 10 build 18362.1040+)”这个未选中,未使用WSL2引擎。d老师表示,可能使用的是较旧的 Hyper-V 或 VirtualBox 作为后端。在这种情况下,容器实际上是在一个虚拟机中运行,而Puppeteer需要Linux内核级权限(如命名空间操作),但当前容器环境权限不足。

解决方法:添加容器特权,在docker run命令中添加–privileged参数,授予容器完全主机权限,解决Operation not permitted错误。

docker run -it --privileged \  
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e N8N_CHROME_ARGS="--no-sandbox --disable-setuid-sandbox" \
  n8n-puppeteer

执行后已成功解决问题。

d老师还提供了另外两种方法,没试过,也先扔出来。
2. 添加特定Linux能力
如果–privileged权限过高,可尝试精细控制:

docker run -it \
  --cap-add=SYS_ADMIN \  # 添加系统管理能力
  --cap-add=NET_ADMIN \  # 添加网络管理能力
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e N8N_CHROME_ARGS="--no-sandbox --disable-setuid-sandbox" \
  n8n-puppeteer
  1. 禁用安全配置文件
docker run -it \
  --security-opt seccomp=unconfined \  # 禁用seccomp
  --security-opt apparmor=unconfined \  # 禁用AppArmor
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e N8N_CHROME_ARGS="--no-sandbox --disable-setuid-sandbox" \
  n8n-puppeteer
  1. 使用root用户运行
docker run ... n8n-puppeteer -u root

(最后实在不行的话就升级windows版本
(垃圾公司电脑升级一直错误 人都麻了


网站公告

今日签到

点亮在社区的每一天
去签到