我正在nodejs中实现puppeteer来呈现pdf。它在本地工作正常,但是当我将Docker与puppeteer一起使用时。相同的代码给我错误。
我尝试研究其他论坛,发现很多其他论坛都面临类似的问题。我还确保我的铬和木偶版本与许多论坛上提到的相同。
我正在使用puppeteer@1.17.0(基于从https://omahaproxy.appspot.com获得的版本76.0.3803.0)以及使用铬76.0.3809.132-r0的阿尔卑斯山的边缘图像。我还尝试了puppeeteer@1.18.0。
仍然面临这个麻烦。任何帮助将不胜感激。
这是我的docker文件
RUN echo "http://dl-2.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories
RUN echo "http://dl-2.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN echo "http://dl-2.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
ENV CHROME_BIN="/usr/bin/chromium-browser" \
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true"
RUN set -x \
&& apk update \
&& apk upgrade \
&& apk add --no-cache \
udev \
ttf-freefont \
chromium \
&& npm install puppeteer@1.17.0
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
WORKDIR /home/node/app
ENV PATH /home/node/app/node_modules/.bin:$PATH
COPY package*.json ./
RUN apk --no-cache --virtual build-dependencies add \
python \
make \
g++ \
&& npm install \
&& apk del build-dependencies
USER node
RUN npm install
RUN mkdir -p /home/node/app/logs
COPY --chown=node:node . .
EXPOSE 4000
EXPOSE 3050
CMD [ "node", "app.js" ]
这是我的JS代码
const puppeteer = require("puppeteer");
fetchLedgerPdf : async function (req,res,next){
const browser = await puppeteer.launch({
headless: true,
executablePath: '/usr/bin/chromium-browser',
args: ['--no-sandbox', '--headless', '--disable-gpu', '--disable-dev-shm-usage']
});
const page = await browser.newPage();
await page.setContent()
await page.addStyleTag()
const buffer = await page.pdf({
// path : 'page.pdf',
format: "A4",
scale : 0.9,
printBackground : true,
displayHeaderFooter : true,
headerTemplate: '<div id="header-template" style="width:100%;text-align:center;font-size:10px !important; color:black; padding-left:10px">Page <span class="pageNumber"></span> of <span class="totalPages"></span></div>',
footerTemplate: '<div>...</div>',
preferCSSPageSize : true
});
await browser.close();
res.end(buffer);
}
这是nodejs抛出的错误
{ Error: Protocol error (IO.read): Invalid parameters handle: string value expected
at Promise (/home/node/app/node_modules/puppeteer/lib/Connection.js:183:56)
at new Promise (<anonymous>)
at CDPSession.send (/home/node/app/node_modules/puppeteer/lib/Connection.js:182:12)
at Function.readProtocolStream (/home/node/app/node_modules/puppeteer/lib/helper.js:241:37)
at Page.pdf (/home/node/app/node_modules/puppeteer/lib/Page.js:988:25)
at process._tickCallback (internal/process/next_tick.js:68:7)
-- ASYNC --
at Page.<anonymous> (/home/node/app/node_modules/puppeteer/lib/helper.js:111:15)
at fetchLedgerPdf (/home/node/app/Models/post/pdfCreation.js:316:39)
at process._tickCallback (internal/process/next_tick.js:68:7)
message:
'Protocol error (IO.read): Invalid parameters handle: string value expected' }
请注意,我的文件名为'pdfCreation.js',错误指向的行(316)是包含'await page.pdf'的行