在Docker中为Puppeter安装Firefox浏览器二进制文件



我正在尝试运行一个依赖于https://github.com/pevers/images-scraper在Docker容器中。我可以在自己的机器上运行脚本(在我的机器上,它有节点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)
})();

软件包.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

使用Node和Docker的新手-我想知道哪里出了问题。感谢

为您的容器安装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" ]

运行chrome而非Firefox时出现错误的错误状态。。。。因此,请确保在Container:中安装了所有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 

来源:这里

根据@LinPy的评论,根据木偶师文档调整我的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构造函数中。感谢

最新更新