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。這會導致腳本無法執行。
解決方案:
- 把文件扔進vsode,CRLF換成LF,保存文件就ok(這個我沒試過,先試的第二種)(二編:試過了不行 還是要改dockerfile內容)
- 改dockerfile內容,添加dos2unix工具
FROM docker.n8n.io/n8nio/n8nUSER 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 nodeENTRYPOINT ["/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
- 禁用安全配置文件
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
- 使用root用戶運行
docker run ... n8n-puppeteer -u root
(最后實在不行的話就升級windows版本
(垃圾公司電腦升級一直錯誤 人都麻了