我正在构建一个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
上面链接的最后部分对此进行了说明,它需要这些库才能正确运行:
我已经修改了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
文件夹中-因此它应该找到它?
答案 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'