Java - Docker 安装依赖项失败 - Html2Pdf 库

Java - Docker fails to install dependencies - Html2Pdf library

我正在构建一个 Java 应用程序,我将在 docker 容器中托管它。此应用程序的一部分是使用此库:

https://github.com/wooio/htmltopdf-java

它需要 URL 并将其转换为 PDF 文档。但是,当 运行 通过 docker 连接 .jar 文件时,我收到错误消息,指出它缺少本机依赖项:

java.lang.UnsatisfiedLinkError: Unable to load library '/tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so': Native library (tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so) not found in resource path

这在上面 link 的最后一节中有记录,它需要这些库才能 运行 正确:

我修改了我的 Dockerfile 以尝试在 docker 构建中安装这些依赖项:

FROM openjdk:8-jdk-alpine

RUN sh -c 'apk update && apk add libssl1.0 libx11 libxext libxrender libstdc++ freetype fontconfig'

COPY server/target/server-0.0.1-SNAPSHOT.jar app.jar

ENTRYPOINT ["java", "-jar", "app.jar"]

我是 docker 的新手,但我在 github repo 的一期中找到了这段代码。但我仍然无法让它工作。

你能找出我无法 运行 程序的问题吗?

编辑:

我仍然收到错误 java.lang.UnsatisfiedLinkError: Unable to load library '/tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so': Native library (tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so) not found in resource path

但是,当通过 SSH 连接到 Docker 容器并查看 tmp- 文件夹时,会列出 io.woo.htmltopdf- 库。路径 tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so 也存在于 docker 容器中。

会不会是路径设置的问题? Java 应用程序没有使用正确的路径?

正在 运行 的 app.jar 位于根文件夹中,tmp 文件夹也位于根文件夹中 - 所以它应该找到它?

我也遇到过 alpine 图片的问题,如果你不介意图片的大小,我会尝试使用 openjdk:8 作为你提供的图片。

Alpine Linux 基于 musl libc,而非 glibc。我的猜测是您的本机库与 musl 不兼容。

您可以试试 openjdk:8-slim。这个是基于 Debian 构建的,它比基于 alpine 的图像稍大,但它能够 运行 为 glibc 构建的库。

您需要使用 apt 安装额外的包,并且需要进行一些研究才能找到哪些包提供了您需要的库。

尝试使用以下行启动 Dockerfile:

FROM openjdk:8-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
      libc6 \
      libx11-6 \
      libxext6 \
      libxrender1 \
      libstdc++ \
      libssl1.0 \
      libfreetype6 \
      fontconfig \
   && apt-get clean \
   && rm -rf /var/lib/apt/lists/*

这会生成一个 1.37 Gb 的映像,其中大部分来自 libstdc++ 及其所有依赖项的安装。这里可能有机会进行优化(您真的需要完整的 C++ Stdlib 才能让您的应用程序正常运行吗?)。如果没有这个包,图像大小会下降到 256 Mb。

我设法通过将本机 wkhtmltopdf 库与 wkhtmltopdf java wrapper 一起使用来解决此问题。

我遇到了同样的问题,顺便说一下,我使用 htmltopdf 版本 1.0.8 但它在 mac os 上工作,但是当我使用图像 [=14] =] 它不工作,然后我尝试将版本降低到 1.0.6,它正在工作

改变

compile group: 'io.woo', name: 'htmltopdf', version: '1.0.8' 

compile group: 'io.woo', name: 'htmltopdf', version: '1.0.6'