Docker环境下无法使用Apache POI的SXSSFWorkbook如何解决?
问题原因
这个错误是因为你用的Alpine Linux基础镜像默认没装libfreetype.so.6,而Apache POI的SXSSFWorkbook生成Excel时需要这个字体渲染依赖库;另外你的Dockerfile里ENTRYPOINT参数也有语法错误——重复写了-jar。
解决方案
方案一:给Alpine镜像补装缺失依赖
修改Dockerfile,添加安装依赖的步骤,同时修正ENTRYPOINT的参数问题:
# For Java 11 FROM adoptopenjdk/openjdk11:alpine-jre # 安装字体相关依赖,解决libfreetype.so.6缺失问题 RUN apk add --no-cache freetype fontconfig # Refer to Maven build -> finalName ARG JAR_FILE=target/customer-service-0.0.1-SNAPSHOT.jar WORKDIR /opt/app COPY ${JAR_FILE} app.jar # 修正ENTRYPOINT参数格式,去掉重复的-jar ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=prod", "-Xms512m", "-Xmx1024m", "-jar", "app.jar"]
方案二:换用非Alpine的JDK镜像
如果不想折腾Alpine的依赖,可以直接用Debian/Ubuntu基础的JDK镜像,这类镜像默认自带更多系统依赖:
# 换用Debian基础的OpenJDK 11镜像 FROM adoptopenjdk/openjdk11:jdk-11.0.11_9-debian ARG JAR_FILE=target/customer-service-0.0.1-SNAPSHOT.jar WORKDIR /opt/app COPY ${JAR_FILE} app.jar ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=prod", "-Xms512m", "-Xmx1024m", "-jar", "app.jar"]
验证步骤
修改完Dockerfile后,重新构建并运行容器:
docker build -t customer-service . docker run -d --name customer-service customer-service
查看容器日志确认错误是否消失:
docker logs customer-service
内容的提问来源于stack exchange,提问作者Hikaru Shindo
相关产品推荐
相关产品推荐

