Java-Docker无法安装依赖项-Html2Pdf库

时间:2019-03-06 10:00:39

标签: java spring docker dockerfile html2pdf

我正在构建一个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

上面链接的最后部分对此进行了说明,它需要这些库才能正确运行:

  • libc6(或glibc)libx11 libxext libxrender libstdc ++ libssl1.0 freetype fontconfig

我已经修改了Dockerfile以尝试在docker build上安装这些依赖项:

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文件夹中-因此它应该找到它?

3 个答案:

答案 0 :(得分:2)

我设法通过使用本机groovy -cp src/main/groovy src/main/groovy/scripts/script.groovy 库和wkhtmltopdf java wrapper来解决此问题。

答案 1 :(得分:1)

我对高山图片也有疑问,如果您不介意图片的大小,我会尝试使用openjdk:8作为您提供的图片。

答案 2 :(得分:1)

通过使用htmltopdf版本1.0.8的方式,我遇到了同样的问题,但它在Mac OS上正常工作,但是当我使用图像docker.io/fabric8/s2i-java:3.0-java8时,它却无法正常工作,然后我尝试版本降到1.0.6,并且可以正常运行

更改

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

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