docker com.microsoft.playwright.PlaywrightException:主机系统缺少运行浏览器的依赖项

vhmi4jdf  于 2023-03-17  发布在  Docker
关注(0)|答案(1)|浏览(492)

我有一个quarkus服务,它使用Playwright库的Java网页抓取任务。在我的windows主机上,当运行服务在localhost上一切正常,但当我运行它在openjdk:17.0.1-jdk-slim docker映像部署,我得到了以下错误时,在服务中使用Playwright执行代码:

com.microsoft.playwright.PlaywrightException: Error {
quarkus-service  |   message='
quarkus-service  | ╔══════════════════════════════════════════════════════╗
quarkus-service  | ║ Host system is missing dependencies to run browsers. ║
quarkus-service  | ║ Missing libraries:                                   ║
quarkus-service  | ║     libsoup-2.4.so.1                                 ║
quarkus-service  | ║     libgstreamer-1.0.so.0                            ║
quarkus-service  | ║     libgtk-3.so.0                                    ║
quarkus-service  | ║     libgdk-3.so.0                                    ║
quarkus-service  | ║     libcairo.so.2                                    ║
quarkus-service  | ║     libepoxy.so.0                                    ║
quarkus-service  | ║     libevent-2.1.so.7                                ║
quarkus-service  | ║     libopus.so.0                                     ║
quarkus-service  | ║     libicui18n.so.67                                 ║
quarkus-service  | ║     libicuuc.so.67                                   ║
quarkus-service  | ║     libpango-1.0.so.0                                ║
quarkus-service  | ║     libharfbuzz.so.0                                 ║
quarkus-service  | ║     libgdk_pixbuf-2.0.so.0                           ║
quarkus-service  | ║     libxml2.so.2                                     ║
quarkus-service  | ║     libsqlite3.so.0                                  ║
quarkus-service  | ║     libxslt.so.1                                     ║
quarkus-service  | ║     liblcms2.so.2                                    ║
quarkus-service  | ║     libwoff2dec.so.1.0.2                             ║
quarkus-service  | ║     libfontconfig.so.1                               ║
quarkus-service  | ║     libfreetype.so.6                                 ║
quarkus-service  | ║     libharfbuzz-icu.so.0                             ║
quarkus-service  | ║     libgstallocators-1.0.so.0                        ║
quarkus-service  | ║     libgstapp-1.0.so.0                               ║
quarkus-service  | ║     libgstbase-1.0.so.0                              ║
quarkus-service  | ║     libgstpbutils-1.0.so.0                           ║
quarkus-service  | ║     libgstaudio-1.0.so.0                             ║
quarkus-service  | ║     libgsttag-1.0.so.0                               ║
quarkus-service  | ║     libgstvideo-1.0.so.0                             ║
quarkus-service  | ║     libgstgl-1.0.so.0                                ║
quarkus-service  | ║     libgstfft-1.0.so.0                               ║
quarkus-service  | ║     libjpeg.so.62                                    ║
quarkus-service  | ║     libpng16.so.16                                   ║
quarkus-service  | ║     libopenjp2.so.7                                  ║
quarkus-service  | ║     libwebpdemux.so.2                                ║
quarkus-service  | ║     libwebp.so.6                                     ║
quarkus-service  | ║     libenchant-2.so.2                                ║
quarkus-service  | ║     libsecret-1.so.0                                 ║
quarkus-service  | ║     libhyphen.so.0                                   ║
quarkus-service  | ║     libX11.so.6                                      ║
quarkus-service  | ║     libXcomposite.so.1                               ║
quarkus-service  | ║     libXdamage.so.1                                  ║
quarkus-service  | ║     libwayland-server.so.0                           ║
quarkus-service  | ║     libwayland-egl.so.1                              ║
quarkus-service  | ║     libwayland-client.so.0                           ║
quarkus-service  | ║     libmanette-0.2.so.0                              ║
quarkus-service  | ║     libgbm.so.1                                      ║
quarkus-service  | ║     libdrm.so.2                                      ║
quarkus-service  | ║     libatomic.so.1                                   ║
quarkus-service  | ║     libxkbcommon.so.0                                ║
quarkus-service  | ║     libdbus-1.so.3                                   ║
quarkus-service  | ║     libGLESv2.so.2                                   ║
quarkus-service  | ║     libx264.so                                       ║
quarkus-service  | ╚══════════════════════════════════════════════════════╝

因此,这个映像上似乎缺少依赖项。对于NodeJS版本的库,似乎有基于NPM的实用程序函数用于Playwright安装这些依赖项,但我不知道如何为Java执行此操作。当我尝试将apt-get install命令添加到我的Docker映像构建中以手动安装所有依赖项时,无法解决这些依赖项。
然后我发现有一个Playwright for Java(https://hub.docker.com/_/microsoft-playwright-java)的docker映像,文档中声明由于某种原因不支持基于alpine的映像,我认为这是相关的(https://playwright.dev/java/docs/docker#usage)。
1.它没有说明此映像使用哪个Java版本,也没有提供明显不同版本的映像。Docker文件甚至不存在,无法查看它在Docker Hub上做什么。我假设Java必须安装在映像上,否则你就不能使用这个库了--那么他们是不是只使用一个固定java版本的映像呢?我看到在为图像使用标记时可以指定Playwright的版本,但是Java版本呢?
1.文档中说明了你不应该将这个镜像用于生产,而应该用于测试和开发。那么我应该如何设置docker镜像用于生产?使用ubuntu基础镜像,安装我需要的java版本,然后手动安装所有依赖项?我不确定我是否遗漏了一些东西,所以我想看看这是否是正确的(或唯一的)方法。

gopyfrb3

gopyfrb31#

https://hub.docker.com/_/microsoft-playwright-javamcr.microsoft.com/playwright/java:v1.30.0-focal完全可以使用。
它没有说明此映像使用的Java版本,也没有提供明显不同的映像版本
使用openjdk-17-jdk,参见https://github.com/microsoft/playwright-java/blob/main/utils/docker/Dockerfile.focal
它在文档中指出,您不应该将此映像用于生产,而只能用于测试和开发
它说It is not recommended to use this Docker image to visit untrusted websites JFYI -查看它是如何添加的https://github.com/microsoft/playwright/issues/20589#issuecomment-1416263856,因为发现了容器漏洞

相关问题