我正在尝试运行一个依赖于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构造函数中。感谢