You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境中Browsershot提示找不到Chrome的问题求助

问题分析与解决方案

核心问题

你遇到的问题根源有两个:

  1. 用户缓存路径不匹配:全局安装puppeteer时,Chromium默认下载到安装用户(通常是root)的缓存目录,但运行Browsershot的是sail用户,它的缓存路径是/home/sail/.cache/puppeteer,两者不互通。
  2. 版本不兼容:项目依赖的puppeteer-core(Browsershot底层依赖)要求Chrome版本为118.0.5993.70,但你安装的puppeteer v19.11.1对应的Chromium版本更低,导致版本要求不匹配。

具体解决方案

方案一:统一puppeteer安装路径与版本

修改Dockerfile,将puppeteer安装到项目目录而非全局,并确保版本与项目依赖的puppeteer-core一致:

RUN apt-get update \
    && apt-get install -y gconf-service libasound2 libappindicator3-1 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm-dev libatk-bridge2.0-0 \
    && cd /var/www/html \
    && npm install puppeteer@19.11.1 --unsafe-perm \
    && chmod -R o+rx node_modules/puppeteer/.local-chromium

然后在Browsershot代码中指定Chrome可执行路径:

Browsershot::html($html)
    ->setChromePath('/var/www/html/node_modules/puppeteer/.local-chromium/linux-*/chrome-linux/chrome')
    ->save('output.pdf');

方案二:安装系统级Chrome替代puppeteer内置版本

直接在Docker中安装官方Chrome,避免版本与路径问题:

RUN apt-get update \
    && apt-get install -y gconf-service libasound2 libappindicator3-1 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm-dev libatk-bridge2.0-0 \
    # 安装官方Chrome
    && wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' \
    && apt-get update \
    && apt-get install -y google-chrome-stable

之后在Browsershot中指定系统Chrome路径:

Browsershot::html($html)
    ->setChromePath('/usr/bin/google-chrome')
    ->save('output.pdf');

方案三:修正缓存路径权限与环境变量

如果你坚持使用全局puppeteer,需要确保sail用户能访问Chromium缓存目录:

RUN apt-get update \
    && apt-get install -y gconf-service libasound2 libappindicator3-1 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm-dev libatk-bridge2.0-0 \
    && npm install --global --unsafe-perm puppeteer@19.11.1 \
    # 复制缓存到sail用户目录并修改权限
    && mkdir -p /home/sail/.cache/puppeteer \
    && cp -r ~/.cache/puppeteer/* /home/sail/.cache/puppeteer/ \
    && chown -R sail:sail /home/sail/.cache/puppeteer \
    && chmod -R o+rx /home/sail/.cache/puppeteer

对你更新内容的补充说明

你手动运行node node_modules/puppeteer/install.js时,Chromium下载到了/home/user/.cache,但运行Browsershot的是sail用户,它无法访问该目录,所以错误依旧。要么将缓存目录权限开放给sail,要么直接按上面的方案调整安装方式。

内容的提问来源于stack exchange,提问作者hyphen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:54:55