无法为Puppeteer创建Docker镜像的问题咨询
解决Puppeteer官方Dockerfile构建时缺少tgz包的问题
问题描述
尝试使用Puppeteer官方提供的Dockerfile创建镜像时,因本地缺少puppeteer-browsers-latest.tgz、puppeteer-latest.tgz、puppeteer-core-latest.tgz三个文件导致构建失败。自行尝试在Puppeteer模块内运行npm pack生成tgz时,先后遇到wireit未识别和cp未识别的错误。
两种可行解决方案
方案一:修改Dockerfile,直接从npm安装(推荐)
官方Dockerfile中的本地tgz包是团队内部发布镜像时使用的预构建包,普通用户无需依赖本地文件,直接从npm官方源安装即可,步骤如下:
- 修改原Dockerfile,删除以下行:
COPY puppeteer-browsers-latest.tgz puppeteer-latest.tgz puppeteer-core-latest.tgz ./
- 将原有的安装命令替换为从npm直接安装:
RUN npm install puppeteer puppeteer-core @puppeteer/browsers \ && (node -e "require('child_process').execSync(require('puppeteer').executablePath() + ' --credits', {stdio: 'inherit'})" > THIRD_PARTY_NOTICES)
修改后的完整Dockerfile如下:
FROM node:18 # Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) # Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer # installs, work. RUN apt-get update \ && apt-get install -y wget gnupg \ && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/googlechrome-linux-keyring.gpg \ && sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrome-linux-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ && apt-get update \ && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-khmeros fonts-kacst fonts-freefont-ttf libxss1 \ --no-install-recommends \ && rm -rf /var/lib/apt/lists/* \ && groupadd -r pptruser && useradd -rm -g pptruser -G audio,video pptruser USER pptruser WORKDIR /home/pptruser # Install @puppeteer/browsers, puppeteer and puppeteer-core from npm RUN npm install puppeteer puppeteer-core @puppeteer/browsers \ && (node -e "require('child_process').execSync(require('puppeteer').executablePath() + ' --credits', {stdio: 'inherit'})" > THIRD_PARTY_NOTICES) CMD ["google-chrome-stable"]
- 重新执行
docker build命令即可完成镜像构建。
方案二:正确生成所需的tgz包(适合需要本地构建包的场景)
如果必须使用本地tgz包,需注意Puppeteer是monorepo结构,需按以下步骤操作(推荐在Linux/macOS或WSL环境下执行,避免Windows命令兼容问题):
- 克隆Puppeteer官方仓库,进入仓库根目录
- 安装所有依赖:
npm install - 运行项目构建命令:
npm run build(此命令会通过wireit完成所有子包的编译构建) - 分别进入
packages/puppeteer、packages/puppeteer-core、packages/puppeteer-browsers目录,执行npm pack命令,生成对应的tgz文件 - 将生成的三个tgz文件复制到Docker构建目录,并分别重命名为
puppeteer-latest.tgz、puppeteer-core-latest.tgz、puppeteer-browsers-latest.tgz - 执行原Dockerfile的
docker build命令即可构建镜像
内容的提问来源于stack exchange,提问作者Rahul Mallick
相关产品推荐
相关产品推荐

