我有一个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版本,然后手动安装所有依赖项?我不确定我是否遗漏了一些东西,所以我想看看这是否是正确的(或唯一的)方法。
1条答案
按热度按时间gopyfrb31#
https://hub.docker.com/_/microsoft-playwright-java和
mcr.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,因为发现了容器漏洞