我正在构建一个将托管在 docker 容器中的 Java 应用程序。此应用程序的一部分是使用此库:
https://github.com/wooio/htmltopdf-java
它获取 URL 并将其转换为 PDF 文档。但是,当通过 docker 运行 .jar
文件时,我得到了它缺少 native 依赖项的错误:
java.lang.UnsatisfiedLinkError: 无法加载库 '/tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so': native 库 (tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so) 在资源路径中找不到
这在上面链接的最后一部分中有记录,它需要这些库才能正确运行:
- libc6(或 glibc) libx11 libxext libxrender libstdc++ libssl1.0 自由字体配置
我已经修改了我的 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) 在资源路径中找不到
但是当通过 SSH 连接到 Docker 容器并查看 tmp
文件夹时,列出了 io.woo.htmltopdf
库。 tmp/io.woo.htmltopdf/wkhtmltox/0.12.5/libwkhtmltox.so
路径也存在于 docker 容器中。
会不会是路径设置的问题? Java 应用程序没有以某种方式使用正确的路径?
正在运行的 app.jar
位于根文件夹中,tmp
文件夹也位于该文件夹中 - 所以应该能找到它?
最佳答案
我通过使用 native wkhtmltopdf
库和 wkhtmltopdf java wrapper 设法解决了这个问题。 .
关于Java - Docker 无法安装依赖项 - Html2Pdf 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55020264/