Den*_*n B 6 java docker alpine-linux java-17
在我们将容器迁移到 alpine_java-17 后,Excel 导出功能失败并出现以下错误:
java.lang.UnsatisfiedLinkError: no fontmanager in system library path: /usr/lib/jvm/java-17-openjdk/lib
Run Code Online (Sandbox Code Playgroud)
在我的 Dockerfile 中我安装了:
RUN apk add --no-cache fontconfig
RUN apk add --no-cache ttf-dejavu
RUN apk add --no-cache freetype
Run Code Online (Sandbox Code Playgroud)
这是 Dockerfile 的简短版本:
FROM custom_registry/alpine_java-17
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk
# procps to have the binary 'pgrep'
RUN apk update
RUN apk add curl
RUN apk add procps
#here's mu solution to fix the issue
RUN apk add --no-cache fontconfig
RUN apk add --no-cache ttf-dejavu
RUN apk add --no-cache freetype
# install bash
RUN apk add --no-cache bash
ENTRYPOINT [ "/app/bin/run.sh" ]
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。也许有人知道如何解决这个问题?提前致谢!
几种选择:
首先,Alpine 上的标准 Java 安装是“无头”Java,它在 JRE lib 目录中不包含任何图形库。您需要确保安装了非无头 JRE。例如在你的 Dockerfile 中
RUN apk add --no-cache curl openjdk17-jre
Run Code Online (Sandbox Code Playgroud)
如果仍然失败,您可能需要调试本机库。
看起来您已经安装了正确的软件包,但它们的默认位置不是 Java 正在查找的 /usr/lib/jvm/java-17-openjdk/lib 位置。
您可以使用 apk 来确认软件包的安装位置,我的猜测是 /usr/lib。
/ $ apk -L info fontconfig
Run Code Online (Sandbox Code Playgroud)
示例输出(用于 lcms)
lcms2-2.12-r1 contains:
usr/lib/liblcms2.so.2
usr/lib/liblcms2.so.2.0.12
Run Code Online (Sandbox Code Playgroud)
那么我认为你有几个选择:
将 /usr/lib/jvm/java-17-openjdk/lib 目录中的符号链接添加到实际库位置。
更新指定系统库位置的 java 启动属性。例如
-Djava.library.path="/usr/lib/jvm/java-17-openjdk/lib:/usr/lib"
归档时间: |
|
查看次数: |
1894 次 |
最近记录: |