Docker镜像中运行Jest Puppeteer自动化测试失败求助
解决Docker中运行Jest-Puppeteer测试时缺失libxshmfence.so.1的问题
问题重现
运行Docker容器执行Jest-Puppeteer测试时,出现如下错误:
Error: Jest: Got error running globalSetup - /usr/src/app/node_modules/jest-environment-puppeteer/setup.js, reason: Failed to launch the browser process! /usr/src/app/node_modules/puppeteer/.local-chromium/linux-884014/chrome-linux/chrome: error while loading shared libraries: libxshmfence.so.1: cannot open shared object file: No such file or directory
问题原因
官方Node.js镜像(基于Debian/Ubuntu)默认未预装Chromium运行所需的底层系统依赖库,即使Puppeteer自带了Chromium二进制文件,也需要这些依赖才能启动浏览器。
解决方案
修改Dockerfile,在安装Node依赖前,先安装Chromium所需的系统依赖:
修改后的Dockerfile
FROM node:16.14.0 WORKDIR /usr/src/app # 安装Chromium运行必需的系统依赖 RUN apt-get update && apt-get install -y \ libxshmfence1 \ libgbm-dev \ libasound2 \ libatk1.0-0 \ libc6 \ libcairo2 \ libcups2 \ libdbus-1-3 \ libexpat1 \ libfontconfig1 \ libgcc1 \ 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 \ && rm -rf /var/lib/apt/lists/* COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 RUN chown -R node /usr/src/app USER node CMD npm run test
关键说明
- 上述依赖列表覆盖了Chromium在Debian环境下运行的所有核心依赖,不仅解决
libxshmfence.so.1缺失问题,还能避免其他类似的依赖报错 - 执行
rm -rf /var/lib/apt/lists/*可以清理apt缓存,减小最终镜像体积 - 必须在切换到
node用户前执行依赖安装,因为apt命令需要root权限
内容的提问来源于stack exchange,提问作者NicoleZ
相关产品推荐
相关产品推荐

