gpt4 book ai didi

node.js - docker 容器中的 puppeteer 操纵者 : Chromium revision is not downloaded

转载 作者:IT老高 更新时间:2023-10-28 21:38:20 55 4
gpt4 key购买 nike

我正在尝试使用 docker-compose 在 docker 容器中运行的快速应用程序中启动 puppeteer。

应该启动 puppeteer 的行 const browser = await puppeteer.launch({args: ['--no-sandbox']});抛出以下错误:

(node:28) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): AssertionError [ERR_ASSERTION]: Chromium revision is not downloaded. Run "npm install"

我尝试添加 yarn add puppeteeryarn install 之后并替换yarn installDockerfilenpm install .

需要改变什么,以便我可以按预期使用带有 Chrome 的 puppeteer?

Express 应用的 Dockerfile:

FROM node:8

RUN apt-get update

# for https
RUN apt-get install -yyq ca-certificates
# install libraries
RUN apt-get install -yyq libappindicator1 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 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
# tools
RUN apt-get install -yyq gconf-service lsb-release wget xdg-utils
# and fonts
RUN apt-get install -yyq fonts-liberation

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY code/package.json /usr/src/app
COPY code/index.js /usr/src/app
RUN mkdir -p /usr/src/app/views
COPY code/views/ /usr/src/app

# install the necessary packages
RUN yarn install

CMD npm run start:dev

docker-compose.yml:

app:
restart: always
build: ${REPO}
volumes:
- ${REPO}/code:/usr/src/app:ro
working_dir: /usr/src/app
ports:
- "8087:5000"

index.js 路由:

app.post('/img', function (req, res) {
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch({args: ['--no-sandbox']});
})();
});

最佳答案

我使用的 docker 卷将整个本地 code 目录映射到 docker 容器的 /usr/src/app 目录。

这对于在开发过程中允许快速代码更新非常有用。

但是,它也会通过 Dockerfile 中的 yarn install 覆盖之前安装在 docker 容器 上的 chromium 版本,其版本为通过命令行中的 yarn installmy machine 上安装 chromium。

每台机器都需要自己的、正确的、特定于操作系统的 Chromium 版本。 docker 容器需要一个 linux 特定的 chromium (linux-515411),我的笔记本电脑需要一个 mac 特定的 chromium (mac-508693)。只需在 package.json 中使用 puppeteer 运行 yarn install(或 npm install)即可安装正确版本的 chromium。

以前的项目结构:

.
├── Dockerfile
├── README.md
└── code
├── index.js
├── package.json
└── node_modules
   ├── lots of other node packages
   └── puppeteer
      ├── .local-chromium
│ └── mac-508693 <--------good for macs, bad for linux!
      ├── package.json
      └── all the other puppeteer files

部分 Dockerfile

这是容器获取自己的 .local-chromium 版本的地方:

FROM node:8

RUN apt-get update

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY code/package.json /usr/src/app
COPY code/index.js /usr/src/app

# install the necessary packages <------ including puppeteer, with the correct chromium
RUN yarn install

CMD npm run start:dev

docker-compose.yml

的上一卷

这会将本地 ${REPO}/code 中的所有内容复制到 docker 容器的 /usr/src/app 目录中。 包括错误的 Chromium 版本。

volumes:
- ${REPO}/code:/usr/src/app:ro

更新项目结构:

.
├── Dockerfile
├── README.md
└── code
├── src
│ ├── index.js
│ └── package.json
└── node_modules
   ├── lots of other node packages
   └── puppeteer
      ├── .local-chromium
      ├── package.json
      └── all the other puppeteer files

更新的 docker 卷将本地 ./code/src 的全部内容映射到 docker 容器的 /usr/src/app。这 NOT 包含 node_modules 目录:

volumes:
- ${REPO}/code/src:/usr/src/app:ro

关于node.js - docker 容器中的 puppeteer 操纵者 : Chromium revision is not downloaded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48192863/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com