背景:node做服务端,并做成docker,里面有生成pdf,直接安装puppeteer,不能直接生成puppeteer,在网上找了很多答案,但是总没有成功运行,经过摸索,把实现方式记录下来,方便其他小伙伴参考。
Q1:chrome headless doesn't launch on node-docker?
A1:
puppeteer-docker 官方推荐:
https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md
实际运行速度很慢,也没有运行成功,会有报错,所以按照我们项目依赖的node12,
找到对应版本的Dockerfile,我截取了部分有用代码放到我们的node项目Dockfile中
RUN apt-get update && \
apt-get -y install xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
libdbus-1-3 libexpat1 libfontconfig1 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 && \
rm -rf /var/lib/apt/lists/*
Q2: puppeteer生成pdf依赖pdftk工具,所以安装docker-pdftk镜像
A2:
截取部分必须代码
RUN apt-get update \
&& apt-get install -y pdftk mc\
&& apt-get clean autoclean \
&& apt-get autoremove --yes \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
&& mkdir /input \
&& mkdir /output
Q3:时区问题处理。系统时间会较北京时间少8小时
A3:
网上找的答案
ENV TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone |tzdata
把三个总结到一起就ok了,如下:
ENV TZ=Asia/Shanghai
RUN apt-get update && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
apt-get -y install xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
libdbus-1-3 libexpat1 libfontconfig1 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 pdftk mc tzdata \
&& apt-get clean autoclean \
&& apt-get autoremove --yes \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
如有不对之处,请多多指正!