英文:
playwright-java inside Docker RuntimeException: Failed to create driver
问题
在使用 Playwright-java(https://github.com/microsoft/playwright-java) 在 Java/Spring 中时,我遇到了异常(请参见下面的日志)。我理解我需要找到一种方法来查看运行容器的临时 .sh 文件,我希望 Java 应用程序使用 playwright-java 在 microsoft.com/playwright/java 容器内运行(版本为 v1.35.0)应该可以正常工作。
Dockerfile
FROM mcr.microsoft.com/playwright/java:v1.35.0-jammy-amd64
# 基于 Ubuntu 22.04 的镜像,具有 Java 17、mvn 3.8.8、chromium-1064、ffmpeg-1009、firefox-1408、webkit-1848
# 详细信息请参见 https://github.com/microsoft/playwright-java/blob/main/utils/docker/Dockerfile.jammy
# 对于标签和可用平台,请参见 https://mcr.microsoft.com/en-us/product/playwright/java/tags
WORKDIR /opt
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} ./company-pdf-service.jar
# 运行服务器
EXPOSE 8300
ENTRYPOINT ["java","-jar","./company-pdf-service.jar"]
请注意,我已经保留了您提供的代码和Dockerfile中的注释,并且没有对它们进行翻译。如果您需要进一步的帮助,请随时提出。
英文:
When using playwright-java https://github.com/microsoft/playwright-java
in Java/Spring
@PostConstruct
void init(){
LOGGER.info("Initializinig Playwright with Chromium ...");
Playwright playwright = Playwright.create();
browser = playwright.chromium().launch(); // Page.pdf only supported in headless Chromium
}
I get Exception (See log below). I understand that I need to find a way to look inside running container temp .sh file, I would expect Java app using playwright-java running inside microsoft.com/playwright/java container (of the same v1.35.0) should just work.
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
2023-06-14T15:05:31.174236127Z at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160)
2023-06-14T15:05:31.174238335Z at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
2023-06-14T15:05:31.174240377Z at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
2023-06-14T15:05:31.174242293Z at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
2023-06-14T15:05:31.174244168Z at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
2023-06-14T15:05:31.174246085Z at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
2023-06-14T15:05:31.174250960Z at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
2023-06-14T15:05:31.174286252Z at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
2023-06-14T15:05:31.174289335Z at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
2023-06-14T15:05:31.174291252Z at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
2023-06-14T15:05:31.174293168Z at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
2023-06-14T15:05:31.174296127Z at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
2023-06-14T15:05:31.174298168Z at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
2023-06-14T15:05:31.174300085Z at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)
2023-06-14T15:05:31.174302293Z at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
2023-06-14T15:05:31.174304168Z at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
2023-06-14T15:05:31.174306002Z at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
2023-06-14T15:05:31.174307793Z at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
2023-06-14T15:05:31.174309543Z at com.company.pdf.Application.main(Application.java:12)
2023-06-14T15:05:31.174311293Z at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2023-06-14T15:05:31.174313085Z at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
2023-06-14T15:05:31.174314918Z at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2023-06-14T15:05:31.174316752Z at java.base/java.lang.reflect.Method.invoke(Method.java:568)
2023-06-14T15:05:31.174318460Z at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
2023-06-14T15:05:31.174320293Z at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
2023-06-14T15:05:31.174322085Z at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
2023-06-14T15:05:31.174323793Z at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
2023-06-14T15:05:31.174325585Z Caused by: java.lang.RuntimeException: Failed to create driver
2023-06-14T15:05:31.174327293Z at com.microsoft.playwright.impl.driver.Driver.createAndInstall(Driver.java:105)
2023-06-14T15:05:31.174330835Z at com.microsoft.playwright.impl.driver.Driver.ensureDriverInstalled(Driver.java:57)
2023-06-14T15:05:31.174334460Z at com.microsoft.playwright.impl.PlaywrightImpl.createImpl(PlaywrightImpl.java:45)
2023-06-14T15:05:31.174340127Z at com.microsoft.playwright.impl.PlaywrightImpl.create(PlaywrightImpl.java:35)
2023-06-14T15:05:31.174343460Z at com.microsoft.playwright.Playwright.create(Playwright.java:110)
2023-06-14T15:05:31.174345335Z at com.microsoft.playwright.Playwright.create(Playwright.java:114)
2023-06-14T15:05:31.174347085Z at com.company.pdf.converter.PlaywrightPdfConverterService.init(PlaywrightPdfConverterService.java:29)
2023-06-14T15:05:31.174348835Z at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2023-06-14T15:05:31.174429543Z at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
2023-06-14T15:05:31.174448960Z at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2023-06-14T15:05:31.174451293Z at java.base/java.lang.reflect.Method.invoke(Method.java:568)
2023-06-14T15:05:31.174453127Z at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
2023-06-14T15:05:31.174455127Z at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
2023-06-14T15:05:31.174457127Z at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
2023-06-14T15:05:31.174458960Z ... 26 common frames omitted
2023-06-14T15:05:31.174460460Z Caused by: java.io.IOException: Cannot run program "/tmp/playwright-java-7667674547892745859/playwright.sh": error=0, Failed to exec spawn helper: pid: 36, exit value: 1
2023-06-14T15:05:31.174462377Z at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
2023-06-14T15:05:31.174464043Z at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
2023-06-14T15:05:31.174465585Z at com.microsoft.playwright.impl.driver.jar.DriverJar.installBrowsers(DriverJar.java:93)
2023-06-14T15:05:31.174467252Z at com.microsoft.playwright.impl.driver.jar.DriverJar.initialize(DriverJar.java:69)
2023-06-14T15:05:31.174468877Z at com.microsoft.playwright.impl.driver.Driver.initialize(Driver.java:64)
2023-06-14T15:05:31.174472752Z at com.microsoft.playwright.impl.driver.Driver.createAndInstall(Driver.java:101)
2023-06-14T15:05:31.174475377Z ... 39 common frames omitted
2023-06-14T15:05:31.174477002Z Caused by: java.io.IOException: error=0, Failed to exec spawn helper: pid: 36, exit value: 1
2023-06-14T15:05:31.174478668Z at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
2023-06-14T15:05:31.174480335Z at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:314)
2023-06-14T15:05:31.174482127Z at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:244)
2023-06-14T15:05:31.174496252Z at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
2023-06-14T15:05:31.174498960Z ... 44 common frames omitted
2023-06-14T15:05:31.174500585Z
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
# See https://github.com/microsoft/playwright-java/blob/main/utils/docker/Dockerfile.jammy
# For tags and available platform see
# https://mcr.microsoft.com/en-us/product/playwright/java/tags
WORKDIR /opt
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} ./company-pdf-service.jar
# run server
EXPOSE 8300
ENTRYPOINT ["java","-jar","./company-pdf-service.jar"]
答案1
得分: 0
请参考这个框架:https://github.com/susnigdha1/PlaywrightTestAutomationFramework,我已经添加了如何使用Spring Boot、Cucumber、JUnit5、Maven和Docker的示例。
英文:
please refer to this framework: https://github.com/susnigdha1/PlaywrightTestAutomationFramework, I have added example of how to use Springboot, Cucumber, Junit5, Maven and Docker.
答案2
得分: 0
问题出在我试图在基于ARM架构的苹果硅芯片的M1 MacBook上运行linux/amd64镜像。
一旦切换到使用ARM架构运行一切:linux/arm64,问题就消失了。确切的原因不清楚,但很可能是纯JDK的问题。
关于使用Docker镜像的一些建议:
设置环境变量DEBUG=pw:install
会提供与浏览器安装和连接相关的更多Playwright日志。
ARG BASE_IMAGE_ARCH=amd64
FROM mcr.microsoft.com/playwright/java:v1.35.0-jammy-${BASE_IMAGE_ARCH}
...
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=true
ENV DEBUG=pw:install
有了这样的Dockerfile,仍然很容易尝试arm64和amd64两者。
英文:
The problem was because I was trying to run linux/amd64 images on M1 mac
(Apple MacBook with ARM-based Apple Silicon).
Once switchedc to run everything as ARM architecture: linux/arm64, the problem went away. The exact cause is unclear, but most likely pure JDK issue.
Some hints for using docker images:
Having envvar DEBUG=pw:install
gives more Playwright logging related to browser install and connection.
ARG BASE_IMAGE_ARCH=amd64
FROM mcr.microsoft.com/playwright/java:v1.35.0-jammy-${BASE_IMAGE_ARCH}
...
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=true
ENV DEBUG=pw:install
With such Dockerfile it is still easy to try both arm64 and amd64
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论