颠簸编辑:问题仅被查看了15次,没有答案,因此请在希望更活跃的时期再试一次。
我有一个使用puppeteer的快速应用程序,可以从网站的某些html生成pdf文件。我用于其的特定网站需要基本身份验证,因此我正在使用伪造者page.authenthenticate,例如:
// index.js
puppeteer
.launch({ args: ['--no-sandbox'] })
.then(t => (browser = t))
.then(() => {
browser.newPage().then(page => {
page.authenticate(CREDENTIALS).then(() => {
console.log('credentials check:', CREDENTIALS)
page.goto(request.query.url).then(() => {
...
该应用程序通过命令“ node index.js”在本地运行和提供服务,该命令运行包含上述代码的文件。现在运行该程序,其中request.query.url指向需要身份验证的网站的URL,一切正常。
但是,如果我尝试像这样对应用程序进行Docker化:
// Dockerfile
FROM node:latest
RUN apt-get update && apt-get install -y \
gconf-service \
libasound2 \
libatk1.0-0 \
libatk-bridge2.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
RUN mkdir -p /var/www/html
WORKDIR /var/www/html
COPY package.json /var/www/html/package.json
RUN npm install
CMD [ "npm", "start" ]
带有docker-compose文件
version: '3.3'
services:
app:
image: app-image
build:
context: .
dockerfile: Dockerfile
container_name: app
env_file:
- .env
expose:
- "5000"
volumes:
- .:/var/www/html
身份验证停止工作。应该注意的是,在dockerized版本中,该应用程序是在虚拟主机(类似于“ app-name.localhost”)上提供的,而不是localhost:5000。
该应用仍会正确呈现不受保护的网页(例如google.com)的pdf,但是当我尝试加载受保护的网页(使用与以前相同的凭据)时,出现错误
UnhandledPromiseRejectionWarning: Error: Failed to navigate: app-url
at Page.goto (/var/www/html/node_modules/puppeteer/lib/Page.js:390:13)
at processTicksAndRejections
(internal/process/task_queues.js:89:5)
我觉得这可能与某些未安装在容器中的ubuntu软件包有关,但是我几乎尝试了所有方法,但似乎没有任何效果。我安装的其他节点模块可能需要一些软件包,所以这是我的package.json
// package.json
{
"name": "my-app",
"version": "0.2.6",
"private": true,
"description": "Node.js app to generate pdfs for my app",
"engines": {
"node": "8.5.0"
},
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "node test.js"
},
"dependencies": {
"ejs": "2.5.6",
"express": "4.15.2",
"puppeteer": "^0.11.0"
},
"devDependencies": {
"request": "^2.81.0",
"tape": "^4.7.0"
}
}