You need to enable JavaScript to run this app. 调用AWS Lambda容器镜像时进程退出返回错误码100问题求助
优惠活动
大模型
产品
解决方案
定价
更多

调用AWS Lambda容器镜像时进程退出返回错误码100问题求助

你遇到的问题不是权限错误,核心是两个Lambda运行环境和本地Docker运行环境的差异导致Chrome启动失败,进而ChromeDriver无法创建有效会话:

  1. 本地测试Docker镜像时默认使用root用户运行,而AWS Lambda运行容器时默认使用无root权限的普通用户,Chrome默认会将缓存、用户配置写入/root目录,普通用户无访问权限,导致Chrome启动崩溃。
  2. 你没有固定Chrome与ChromeDriver的版本匹配,webdriver-manager自动拉取的版本可能和你安装的Chrome版本不兼容。

解决方案

第一步:修改Protractor配置

在conf.js的chromeOptions.args中新增以下参数,指定Chrome所有写入路径都到Lambda唯一可写的/tmp目录,同时明确ChromeDriver路径避免查找错误:

exports.config = {
  directConnect: true,
  ignoreUncaughtExceptions: true,
  SELENIUM_PROMISE_MANAGER: false,
  'specs': ['index.js'],
  jasmineNodeOpts: {
    // 建议调整超时时间到15秒,避免冷启动时Chrome启动慢导致超时
    defaultTimeoutInterval: 1000 * 15,
    realtimeFailure: true,
    showColors: true,
    isVerbose: true,
    includeStackTrace: true,
    displaySpecDuration: true,
    print: function () {},
  },
  'capabilities': {
    'browserName': 'chrome',
    acceptInsecureCerts: true,
    acceptSslCerts: true,
    // 新增这行,明确ChromeDriver路径
    chromeDriver: '/usr/bin/chromedriver',
    chromeOptions: {
      binary: "/usr/bin/google-chrome",
      "excludeSwitches": [ "enable_automation" ],
      "useAutomationExtension": false,
      args: [
        "--no-sandbox",
        "--disable-web-security",
        "--headless",
        "--disable-dev-shm-usage",
        "--disable-extensions", 
        "--disable-gpu", 
        "--start-maximized", 
        "--disable-infobars",
        // 新增以下参数,指定所有写入路径到/tmp
        "--user-data-dir=/tmp/chrome",
        "--profile-directory=Default",
        "--data-path=/tmp/data-path",
        "--disk-cache-dir=/tmp/cache-dir",
        "--homedir=/tmp"
      ]
    }
  },
  framework: "jasmine"
};

第二步:修改Dockerfile,固定Chrome与ChromeDriver版本

删除原有的webdriver-manager相关操作,安装Chrome后直接下载对应版本的ChromeDriver到系统路径,避免版本不兼容:

FROM amazon/aws-lambda-nodejs:12
COPY index.js conf.js handler.js package*.json screenshots ./
ADD gtk-firefox.sh .
RUN chmod 755 gtk-firefox.sh
RUN ./gtk-firefox.sh
# 安装Chrome
RUN curl https://intoli.com/install-google-chrome.sh | bash
# 下载与已安装Chrome版本完全匹配的ChromeDriver
RUN CHROME_VERSION=$(google-chrome --version | grep -oP "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+") && \
    wget -q https://chromedriver.storage.googleapis.com/${CHROME_VERSION}/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip && \
    mv chromedriver /usr/bin/chromedriver && \
    chmod +x /usr/bin/chromedriver && \
    rm chromedriver_linux64.zip
RUN npm install
# 删除原有的webdriver-manager操作
# RUN node ./node_modules/protractor/bin/webdriver-manager clean
# RUN node ./node_modules/protractor/bin/webdriver-manager update
CMD [ "handler.runtest" ]

第三步:本地模拟Lambda环境验证

修改后本地测试时加上用户参数,模拟Lambda的非root运行环境,不用推到ECR就可以验证是否正常:

docker run --user 1001 <你的镜像名>

内容的提问来源于stack exchange,提问作者Shivi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 11:36:03