google-chrome 尝试在 AWS 上托管的 Ubuntu Docker 映像上创建 mimeapps.list 由于只读目录,Lambda 崩溃了

问题描述 投票:0回答:1

我创建了一个 Ubuntu Docker 映像并将其用作 Lambda 函数。我已经完成了所有先决条件,例如安装 lambda-runtime-interface。 Docker 镜像是通过安装 google-chrome-stable 驱动程序构建的,供 Puppeteer 用于网络爬行应用程序。我只想提一下,我已经尝试过 chrome-aws-lambda,但它没有满足我们的要求。我们需要最新的 Puppeteer npm 软件包,因此我正在使用 Ubuntu 构建自定义 Docker 映像,并且它在容器化环境中运行良好(ECS)。

问题: 当在 AWS Lambda 上运行时,当收到请求并且由 puppeter 函数启动的浏览器崩溃时,下面是堆栈跟踪。

Error: Failed to launch the browser process!
mkdir: cannot create directory '/home/sbx_user1051': Read-only file system
touch: cannot touch '/home/sbx_user1051/.local/share/applications/mimeapps.list': No such file or directory
/usr/bin/google-chrome: line 45: /dev/fd/63: No such file or directory
/usr/bin/google-chrome: line 46: /dev/fd/63: No such file or directory
chrome_crashpad_handler: --database is required
Try 'chrome_crashpad_handler --help' for more information.
[35:35:0828/093835.966383:ERROR:socket.cc(120)] recvmsg: Connection reset by peer (104)

这是我通过 pupeteer 启动 chrome 的函数/参数

const browser = await puppeteer.launch({ headless: "new", executablePath: '/usr/bin/google-chrome', ignoreDefaultArgs: ['--disable-extensions'], args: ['--no-sandbox', '--disable-setuid-sandbox','--no-default-browser-check'], timeout: 0,  protocolTimeout: 24000000 });

我知道 Lambda 中只有在“/tmp”中写入文件的目录,但我找不到如何更改 chrome 配置以使用“/tmp”目录而不是“/home/sbx_user1051/.local/share” /应用程序/'

下面是我的 Dockerfile

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install curl wget -y

#Installing NodeJS 16
RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
RUN apt-get install nodejs

# Installing dependencies for Google-chrome
RUN apt install -y libxss1 libappindicator1 libindicator7 libasound2 libgconf-2-4 libnspr4 libnss3 libx11-xcb1 libxtst6 xauth xvfb

RUN apt install -y libatk-bridge2.0-0 fonts-liberation libatspi2.0-0 libgbm1 libgtk-4-1 libu2f-udev libvulkan1 libxkbcommon0 xdg-utils

# Installing Google-chrome
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN dpkg -i google-chrome-stable_current_amd64.deb
RUN apt-get install -f
RUN google-chrome --version

# Installing dependencies for Lambda runtime interface
RUN apt-get install -y \
g++ \
make \
cmake \
unzip \
libtool \
libcurl4-openssl-dev

# Installing lambda runtime interface
RUN apt-get install cmake -y
RUN apt-get install autoconf -y
RUN npm install aws-lambda-ric

# Copy function code
COPY / ${LAMBDA_TASK_ROOT}

RUN npm install

ENV NPM_CONFIG_CACHE=/tmp/.npm
ENV CHROME_USER_DATA_DIR=/tmp/chrome

ENTRYPOINT ["/usr/bin/npx", "aws-lambda-ric"]
CMD ["index.handler"]
google-chrome ubuntu aws-lambda puppeteer google-chrome-headless
1个回答
0
投票

您需要将路径更改为 Chrome 可以写入的路径,例如 /tmp。

将 XDG 环境变量更改为 /tmp 文件夹,例如:

export XDG_DATA_HOME=/tmp/.chromium
export XDG_CONFIG_HOME=/tmp/.chromium
export XDG_CACHE_HOME=/tmp/.chromium
© www.soinside.com 2019 - 2024. All rights reserved.