You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lambda的Docker容器中运行Java Selenium遇Chrome/Chromedriver问题

AWS Lambda Docker容器运行Java Selenium Chrome项目失败问题

我需要在AWS Lambda无服务器环境的Docker容器中运行以下Java Selenium代码:

System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
ChromeOptions options = new ChromeOptions();
//... optionsSetupHere
WebDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.get("https://www.wikipedia.org");
driver.quit();
return "done";

但无论如何调整配置,始终会遇到以下两类错误之一:

错误类型1

[1669291624.447][SEVERE]: bind() failed: Cannot assign requested address (99)
Could not start a new session. Response code 500. Message: unknown error: Chrome failed to start: crashed.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) 

错误类型2

[1669276586.713][SEVERE]: CreatePlatformSocket() failed: Address family not supported by protocol (97)
ChromeDriver was started successfully.
[1669276589.300][SEVERE]: CreatePlatformSocket() failed: Address family not supported by protocol (97)
Could not start a new session. Response code 500. Message: unknown error: unable to discover open window in chrome

我已尝试过所有常见的Chromedriver启动参数,但均未解决问题:

options.addArguments("--headless");
options.addArguments("--start-maximized");
options.addArguments("--no-sandbox");
options.addArguments("--test-type");
options.addArguments("--ignore-certificate-errors");
options.addArguments("--disable-popup-blocking");
options.addArguments("--disable-default-apps");
options.addArguments("--disable-extensions-file-access-check");
options.addArguments("--incognito");
options.addArguments("--disable-infobars");
options.addArguments("--disable-gpu");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-notifications");
options.addArguments("--window-size=1980,1080");
options.addArguments("--single-process");
options.addArguments("--disable-extensions");
options.addArguments("--allow-running-insecure-content");
options.addArguments("--disable-web-security");
options.addArguments("--user-agent=\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36\"");

环境配置

  • Selenium版本:4.6.0
  • Chromedriver版本:107.0.5304.62
  • Chrome版本:107.0.5304.87-1
  • JDK版本:8

Dockerfile内容

使用markhobson/maven-chrome:jdk-8作为基础镜像,添加Lambda运行时模拟器,完整Dockerfile如下:

FROM --platform=linux/amd64 markhobson/maven-chrome:jdk-8 as base
FROM base as build
WORKDIR /src
ADD pom.xml .
RUN mvn dependency:go-offline dependency:copy-dependencies
ADD . .
RUN mvn package

# Create final image
FROM base
WORKDIR /function

COPY --from=build /src/target/dependency/*.jar ./
COPY --from=build /src/target/*.jar ./

# Lambda env config
ENTRYPOINT [ "/usr/local/openjdk-8/bin/java", "-cp", "./*", "com.amazonaws.services.lambda.runtime.api.client.AWSLambda" ]
CMD [ "example.App::sayHello" ]

补充尝试

  • 使用headless chromium替代Chrome时可正常运行,但业务需求必须切换到Chrome
  • 尝试将Chrome和Chromedriver移动到/tmp目录,无任何改善
  • 基于umihico/docker-selenium-lambda镜像安装Java并替换处理程序后,仍出现相同错误(该仓库中的Python脚本可正常执行)
  • 使用AWS Lambda Java官方Docker基础镜像时,无法通过yum安装Chrome;手动按照umihico/docker-selenium-lambda的方式解压Chrome二进制文件后,出现“无法找到指定路径下的Chrome二进制文件”错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:31:07