Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌云上运行的Chromium内部docker图像_Docker_Google Cloud Platform_Google Chrome Headless_Google Cloud Run - Fatal编程技术网

谷歌云上运行的Chromium内部docker图像

谷歌云上运行的Chromium内部docker图像,docker,google-cloud-platform,google-chrome-headless,google-cloud-run,Docker,Google Cloud Platform,Google Chrome Headless,Google Cloud Run,我试图让docker容器在google cloud run上运行,它包含一个简单的nodejs应用程序和google chromium headless,用于从HTML源创建PDF。 不幸的是,Google Cloud Run似乎在我尝试的解决方案中存在问题 我的Docker映像在本地和其他提供商(即Azure)上运行良好,但GCP无法正常工作 我尝试的是: 基本上构建任何docker映像、安装节点、npm、chromium、, 然后在后台运行chromium——无头。 然后运行节点应用程序。

我试图让docker容器在google cloud run上运行,它包含一个简单的nodejs应用程序和google chromium headless,用于从HTML源创建PDF。 不幸的是,Google Cloud Run似乎在我尝试的解决方案中存在问题

我的Docker映像在本地和其他提供商(即Azure)上运行良好,但GCP无法正常工作

我尝试的是:

基本上构建任何docker映像、安装节点、npm、chromium、, 然后在后台运行chromium——无头。 然后运行节点应用程序。 Node应用程序只是试图连接到127.0.0.1:9222=>上,这在GCP上不起作用,但在其他任何地方都可以

我尝试了docker hub的官方节点图像 我试着用阿尔卑斯山的形象 我尝试使用debian图像 所有这些都可以在本地运行,但不能在谷歌云上运行

下面是我对debian映像的最新测试:

FROM debian:latest


RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
        nodejs yarn npm chromium \
        && apt-get clean \
        && apt-get autoclean
RUN adduser --home /home/node --disabled-password --gecos "" node \
        && mkdir /home/node/app \
        && chown -R node:node /home/node/app
RUN apt-get install -y wget
RUN npm cache clean -f
RUN npm i -g n
RUN n stable
RUN node --version
RUN npm --version

USER node
WORKDIR /home/node/app
ENV CHROME_BIN=/usr/bin/chromium \
        CHROME_PATH=/usr/lib/chromium/

ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV}


COPY --chown=node . .

RUN npm install

RUN npm run build

ENV HOST=0.0.0.0 PORT=3000

EXPOSE ${PORT}

ENTRYPOINT [ "sh", "-c", "/home/node/app/docker-inside-start.sh" ]

入口点sh为:

#!/bin/sh
exec $CHROME_BIN --headless --use-gl=swiftshader \
        --disable-software-rasterizer --disable-dev-shm-usage --remote-debugging-port=9222 \
        --remote-debugging-address=0.0.0.0 --no-sandbox --disable-gpu \
        --no-first-run --no-crash-upload --no-pings --no-wifi &
node .
我的节点代码如下所示。没什么特别的。。 APP_CONFIG_CHROME_HOST被设置为localhost或127.0.0.1-没有任何功能

import * as htmlPdf from 'html-pdf-chrome';
// ...
private createPdf(html: string): Promise<string> {
    return new Promise((resolve, reject) => {
      try {
        const options: htmlPdf.CreateOptions = {
          host: process.env.APP_CONFIG_CHROME_HOST,
          port: 9222, // port Chrome is listening on
        };
        htmlPdf.create(html, options)
          .then((pdf) => resolve(pdf.toBase64()))
          .catch(e => reject(e));
      } catch (err) {
        reject(err);
      }
    });
  }

我正在运行chrome inside Cloud Run,将网页转换为PDF(并将10转换为SVG)。找到我的回购协议

这是我的Dockerfile:

FROM node:14-slim

    # Add contrib packages for ms fonts
RUN echo "deb http://http.debian.net/debian/ stretch main contrib non-free" > /etc/apt/sources.list && \
    echo "deb http://http.debian.net/debian/ stretch-updates main contrib non-free" >> /etc/apt/sources.list && \
    echo "deb http://security.debian.org/ stretch/updates main contrib non-free" >> /etc/apt/sources.list && \
    apt-get update && \
    # Adds required libs for Headless Chrome
    apt-get install -yq 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 \
    # fonts
    ttf-mscorefonts-installer fontconfig && \
    fc-cache -f

# Start the app
WORKDIR /usr/src/app
COPY package*.json ./
ENV NODE_ENV=production
RUN npm install --production
COPY . .
CMD [ "npm", "start" ]
下面是我的Node.js代码的相关部分,使用的是
“puppeter”:“^3.0.4”


谢谢@Sterem,这很有希望。我重新创建了它,并在本地成功地执行了它。然而部署到google cloud run后,我面临以下错误:``2020-09-14 08:28:58.260 MESZ[2020-09-14T06:28:58.060Z][error]TimeoutError:尝试连接到浏览器时在30000毫秒后超时!只有版本为r800071的Chrome才能保证正常工作。我发现了这个问题:但到目前为止,我还没有看到解决方案。。到目前为止,GCP非常令人失望。我不知道我为什么还要经历这些,只是为了跟进。我试过用木偶演员5.x。按照你的建议降级到3.x之后。对于不同的版本,大约30秒后,我也会得到相同的结果:
2020-09-14 09:06:47.264 MESZ[2020-09-14 t07:06:45.763Z][ERROR]TimeoutError:30000毫秒后尝试连接到浏览器时超时!只有版本为r756035的Chrome才能保证工作。
我想我会将我们的应用程序移动到AWS或继续在azure上运行。GCP似乎与许多事情不兼容所有phantomjs版本-chrome headless as a service-chrome通过Puppeter直接执行从构建日志:
步骤0-“构建”:chrome(756035)下载到/home/node/app/node_modules/puppeter/。local chrome/linux-756035
我正在更新此版本并接受您的解决方案,因为我尝试了您的存储库,一切都在那里运行。不幸的是,我的应用程序(一个环回4项目)没有运行完全相同的库和代码。所以我可能会遇到一件超出我范围的事情。。。。我删除了上述api中的逻辑,并为该任务创建了一个微服务,它运行时不会出现问题。很奇怪。尽管如此,最初的发现对我来说仍然是正确的:应用程序(PDF生成的loopback4在任何地方运行,但在GCP上运行)。除了Cloud run,Cheers“GCP”还有许多其他地方可以运行容器,请查看Kubernetes引擎或计算引擎。此外,避免评论您将“将您的应用程序移动到AWS”。这与此答案无关。
FROM alpine:latest

ARG BUILD_DATE
ARG VCS_REF

LABEL org.label-schema.build-date=$BUILD_DATE \
        org.label-schema.description="Chrome running in headless mode in a tiny Alpine image" \
        org.label-schema.name="alpine-chrome" \
        org.label-schema.schema-version="1.0.0-rc1" \
        org.label-schema.usage="https://github.com/Zenika/alpine-chrome/blob/master/README.md" \
        org.label-schema.vcs-url="https://github.com/Zenika/alpine-chrome" \
        org.label-schema.vcs-ref=$VCS_REF \
        org.label-schema.vendor="Zenika" \
        org.label-schema.version="latest"

# Installs latest Chromium package.
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories \
        && echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
        && echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
        && echo "http://dl-cdn.alpinelinux.org/alpine/v3.11/main" >> /etc/apk/repositories \
        && apk upgrade -U -a \
        && apk add --no-cache \
        libstdc++ \
        chromium \
        harfbuzz \
        nss \
        freetype \
        ttf-freefont \
        wqy-zenhei \
        tini make gcc g++ python git nodejs nodejs-npm yarn \
        && rm -rf /var/cache/* /var/lib/apt/lists/* /usr/share/man /tmp/*

RUN mkdir -p /home/node/app \
        && adduser -D node \
        && chown -R node:node /home/node/app

USER node
WORKDIR /home/node/app

ENV CHROME_BIN=/usr/bin/chromium-browser \
        CHROME_PATH=/usr/lib/chromium/


# set ENV to development if NOT given in command line
ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV}

COPY --chown=node package*.json ./

RUN npm install

COPY --chown=node . .

RUN npm run build

ENV HOST=0.0.0.0 PORT=3000

EXPOSE ${PORT}
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "sh", "-c", "/home/node/app/docker-inside-start.sh" ]
FROM node:14-slim

    # Add contrib packages for ms fonts
RUN echo "deb http://http.debian.net/debian/ stretch main contrib non-free" > /etc/apt/sources.list && \
    echo "deb http://http.debian.net/debian/ stretch-updates main contrib non-free" >> /etc/apt/sources.list && \
    echo "deb http://security.debian.org/ stretch/updates main contrib non-free" >> /etc/apt/sources.list && \
    apt-get update && \
    # Adds required libs for Headless Chrome
    apt-get install -yq 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 \
    # fonts
    ttf-mscorefonts-installer fontconfig && \
    fc-cache -f

# Start the app
WORKDIR /usr/src/app
COPY package*.json ./
ENV NODE_ENV=production
RUN npm install --production
COPY . .
CMD [ "npm", "start" ]
    if(!browser) {
        browser = await puppeteer.launch({
            args: ['--no-sandbox']
        });
    }
    if(!page) {
        page = await browser.newPage();
    }

    // https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#pagepdfoptions
    await page.emulateMedia('screen');
    let printParams = {
        path: inputPDFFilename,
        width,
        printBackground: true
    };
    if(height) {
        printParams.height = height;
    }
    await page.pdf(printParams);