在阿里函数计算中,我在nodejs16环境中添加了一个自定义层,层里面的内容是chrome之后咋搞?[阿里云Serverless]

在阿里函数计算中,我在nodejs16环境中添加了一个自定义层,层里面的内容是chrome,当我尝试运行该chrome是,提示没有权限执行 Failed to launch the browser process! spawn /opt/chrome-linux-118_0_5993_70/chrome EACCES,我应该如何添加权限呢?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
4 条回复 A 作者 M 管理员
  1. 代码写个 hello world 然后登录到实例里面 cd 到 /opt 目录下直接起一下试试 看看报什么错。1. 用容器镜像来写业务。

    1. 使用我们准备好的示例代码和准备好的层
    2. 自己在层里安装好缺少的 apt 依赖要用方案3的话可以参考 https://developer.aliyun.com/article/1323852?spm=a2c6h.13262185.profile.12.6f0d3c66QTKEFD。此回答来自钉群阿里函数计算官网客户。
  2. 在阿里函数计算中,您可以尝试以下方法来添加权限:

    1. 更改chrome可执行文件的权限。您可以使用chmod命令来更改文件权限,例如:
    sudo chmod +x /opt/chrome-linux-118_0_5993_70/chrome
    1. 将chrome可执行文件移动到一个具有执行权限的目录,例如/usr/local/bin
    sudo mv /opt/chrome-linux-118_0_5993_70/chrome /usr/local/bin/chrome

    然后,您需要确保在您的自定义层中引用的是这个新的可执行文件路径。例如,如果您在package.json文件中指定了chrome作为启动命令,您需要将其更改为:

    {  "scripts": {    "start": "/usr/local/bin/chrome"  }}
    1. 如果问题仍然存在,您可以尝试在运行自定义层时使用--no-sandbox选项,以允许Chrome在无沙箱模式下运行。例如:
    node --no-sandbox your-custom-layer.js

    请注意,这些方法可能需要根据您的具体环境和需求进行调整。希望这对您有所帮助!

  3. 由于安全性考虑,自定义层默认不允许直接执行,以避免恶意攻击。要使用 Chrome,可以采取以下措施:

    1. 修改 Dockerfile,在启动时增加 exec 标记,例如 run chmod +x chrome;
    2. 添加运行权限:chown -R your-user /opt/chrome-linux-118_0_5993_70;
    3. 使用 chgrp 命令添加执行权限:chgrp -R user-name /opt/chrome-linux-118_0_5993_70/chrome;
    4. 使用 chown 命令赋予权限:chmod +x /opt/chrome-linux-118_0_5993_70/chrome。
  4. 在阿里云函数计算中,当你在Node.js 16环境中添加了一个自定义层并试图运行Chrome时,出现”Failed to launch the browser process! spawn /opt/chrome-linux-118_0_5993_70/chrome EACCES”的错误,这是因为Chrome的二进制文件没有执行权限。

    你可以使用以下命令来为Chrome的二进制文件添加执行权限:

    chmod +x /opt/chrome-linux-118_0_5993_70/chrome

    这条命令会为"/opt/chrome-linux-118_0_5993_70/chrome"这个文件添加执行权限。

    但是,这种方法只能解决一次的问题。每次重启函数实例后,Chrome的二进制文件的执行权限都会丢失,因为函数计算会在每次重启函数实例时重新下载并解压Chrome的二进制文件。

    为了解决这个问题,你可以使用阿里云函数计算的"持久化存储"功能。你可以将Chrome的二进制文件保存在持久化存储中,然后在每次函数实例启动时,从持久化存储中读取并运行Chrome的二进制文件。这样可以确保Chrome的二进制文件始终保持执行权限。

  5. 在Linux环境中运行Chrome需要具有一定的权限。为了使Chrome可以在自定义层中运行,需要赋予它足够的权限。为此,可以通过以下步骤来增加自定义层中Chrome的权限:

    1. 运行命令 chown -R 用户名 自定义层路径 来将所有者更改为运行函数计算的用户。这样可以使Chrome拥有适当的权限。
    2. 尝试再次运行Chrome,以确认其是否可以正常启动。如果Chrome仍然无法运行,请继续下一步骤。
    3. 您可能还需要授予Chrome可执行权限,以便它可以被运行。为此,请运行 chmod +x 自定义层路径/chrome 以给Chrome文件赋予可执行权限。
    4. 再次运行Chrome,确认其是否可以正常启动。