【问题标题】:Install a Firefox browser binary for Puppeteer in Docker在 Docker 中为 Puppeteer 安装 Firefox 浏览器二进制文件
【发布时间】:2021-06-27 08:39:31
【问题描述】:

我正在尝试在 Docker 容器中运行依赖于 https://github.com/pevers/images-scraper 的脚本。我可以自己运行脚本(在我的具有节点 14.15.4 的机器上,执行node src/index.js 这将产生控制台输出 A),但在 docker 的上下文中它不起作用 - 我收到一条错误消息关于丢失的 Firefox 二进制文件。

Dockerfile:

FROM node:14

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

RUN PUPPETEER_PRODUCT=firefox npm install puppeteer

COPY . .

CMD [ "node", "src/index.js" ]

src/index.js:

let Scraper = require("images-scraper");

const google = new Scraper({
  puppeteer: {
    userAgent:
      "Mozilla/5.0 (X11; Linux i686; rv:64.0) Gecko/20100101 Firefox/64.0", 
    headless: true,
    safe: true,
  },
});


(async () => {
  const A = await google.scrape("bananas", 200);
  console.log(A)
})();

package.json

{
    "name": "test",
    "version": "1.0.0",
    "scripts": {
      "test": "node src/index.js"
    },
    "dependencies": {
      "images-scraper": "^6.2.1"
    }
  }

当我 /bin/bash 进入我的容器并执行 node src/index.js 时,我得到了错误:

    at ChromeLauncher.launch (/usr/src/app/node_modules/puppeteer/lib/cjs/puppeteer/node/Launcher.js:79:23)
    at async GoogleScraper.scrape (/usr/src/app/node_modules/images-scraper/src/google/scraper.js:53:21)
    at async /usr/src/app/src/index.js:19:13

在 Docker 中使用 Node 的新手——我想知道我哪里出错了。谢谢

【问题讨论】:

    标签: node.js docker puppeteer


    【解决方案1】:

    根据@LinPy 的评论,根据 puppeteer 文档调整我的 Dockerfile:

    FROM alpine:edge
    
    # Installs latest Chromium (89) package.
    RUN apk add --no-cache \
          chromium \
          nss \
          freetype \
          freetype-dev \
          harfbuzz \
          ca-certificates \
          ttf-freefont \
          nodejs \
          nodejs-npm \
          yarn
    
    
    # Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
    ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
        PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
    
    # Puppeteer v6.0.0 works with Chromium 89.
    RUN yarn add puppeteer@6.0.0
    ...
    

    我也将args: ['--no-sandbox', '--disable-setuid-sandbox'] 添加到 Scraper 构造函数中。谢谢

    【讨论】:

      【解决方案2】:

      为您的容器安装 firefox 执行:

      FROM node:14
      
      RUN apt-get update \
          && apt-get install -y wget gnupg fonts-ipafont-gothic fonts-freefont-ttf firefox-esr --no-install-recommends \
          && rm -rf /var/lib/apt/lists/*
      
      WORKDIR /usr/src/app
      
      COPY package*.json ./
      
      RUN npm install
      
      RUN PUPPETEER_PRODUCT=firefox npm install puppeteer
      
      COPY . .
      
      CMD [ "node", "src/index.js" ]
      

      【讨论】:

      • 错误是 ChromeLauncher.launch 而不是 Firefox
      • @LinPy getting an error message about a missing Firefox binary. 然后我猜他们必须安装 Firefox 二进制文件。
      【解决方案3】:

      运行 chrome 而不是 Firefox 出现错误的错误状态 .... 所以请确保您的容器中安装了所有 chrome 依赖项:

      ca-certificates
      fonts-liberation
      libappindicator3-1
      libasound2
      libatk-bridge2.0-0
      libatk1.0-0
      libc6
      libcairo2
      libcups2
      libdbus-1-3
      libexpat1
      libfontconfig1
      libgbm1
      libgcc1
      libglib2.0-0
      libgtk-3-0
      libnspr4
      libnss3
      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
      lsb-release
      wget
      xdg-utils 
      

      来源:Here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        • 2022-06-13
        • 1970-01-01
        • 2014-01-23
        • 2021-04-26
        • 1970-01-01
        • 2020-12-24
        相关资源
        最近更新 更多