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

Docker中运行Playwright-Java抛出Failed to create driver异常求助

解决Playwright-Java在Docker容器中启动失败的问题

问题背景

在Java/Spring项目中集成Playwright-Java后,使用官方提供的mcr.microsoft.com/playwright/java:v1.35.0-jammy-amd64镜像构建Docker容器,应用启动时抛出BeanCreationException,根源为Playwright无法创建驱动——具体表现为无法执行临时目录中的playwright.sh脚本,报错Failed to exec spawn helper: pid: 36, exit value: 1。

异常日志详情

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'playwrightPdfConverterService': Invocation of init method failed; nested exception is java.lang.RuntimeException: Failed to create driver
...
Caused by: java.io.IOException: error=0, Failed to exec spawn helper: pid: 36, exit value: 1
...

相关代码与配置

Playwright初始化代码

@PostConstruct
void init(){
  LOGGER.info("Initializinig Playwright with Chromium ...");
  Playwright playwright = Playwright.create();
  browser = playwright.chromium().launch(); // Page.pdf only supported in headless Chromium
}

Dockerfile内容

FROM mcr.microsoft.com/playwright/java:v1.35.0-jammy-amd64
# Ubuntu 22.04-based image with java 17, mvn 3.8.8
# and chromium-1064  ffmpeg-1009  firefox-1408  webkit-1848

WORKDIR /opt

ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} ./company-pdf-service.jar

EXPOSE 8300
ENTRYPOINT ["java","-jar","./company-pdf-service.jar"]

解决办法

方案1:调整Java启动参数,修复Spawn Helper问题

Java 17及以上版本默认使用posix_spawn作为进程启动机制,部分环境下会触发Spawn Helper执行失败。在Java启动命令中添加-Djdk.lang.Process.launchMechanism=vfork参数即可绕过该问题:

修改Dockerfile的ENTRYPOINT:

ENTRYPOINT ["java","-Djdk.lang.Process.launchMechanism=vfork","-jar","./company-pdf-service.jar"]

方案2:显式指定镜像预装的浏览器路径

官方Playwright镜像已预装对应版本的浏览器,无需Playwright自动下载。显式指定浏览器可执行文件路径,避免临时目录权限问题:

修改Playwright初始化代码:

import java.nio.file.Paths;
// ...

@PostConstruct
void init(){
  LOGGER.info("Initializinig Playwright with Chromium ...");
  Playwright playwright = Playwright.create();
  BrowserType chromium = playwright.chromium();
  // 路径对应镜像中预装的Chromium版本,需与镜像标签匹配
  browser = chromium.launch(new BrowserType.LaunchOptions()
          .setExecutablePath(Paths.get("/ms-playwright/chromium-1064/chrome-linux/chrome")));
}

方案3:修复临时目录权限

如果是/tmp目录权限不足导致脚本无法执行,可在Dockerfile中添加权限配置:

RUN chmod 777 /tmp

内容的提问来源于stack exchange,提问作者Paul Verest on LinkedIn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:05:31