Search code examples
javadockerjasper-reportsalpine-linux

Docker and Spring boot giving "sun.awt.FontConfiguration.head" is null


I currently have an app built with spring boot. Im using Jasper reports. When I try to generate a report, I get the following error:

java.lang.NullPointerException: Cannot load from short array because "sun.awt.FontConfiguration.head" is null at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1260) ~[na:na]

The application works fine on my computer, it only fails in docker.

Here's my Dockerfile:

FROM openjdk:17-alpine
EXPOSE 10093
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} site_informativo.jar

RUN apk update;
RUN apk add -f apt-utils;
RUN apk add -f libfreetype6;
RUN apk add --no-cache -f fontconfig;
RUN apk add -f fonts-dejavu;
RUN apk add -f msttcorefonts;
RUN apk add -f libfontconfig1;
RUN apk add -f freetype;
RUN fc-cache --force

ENTRYPOINT ["java","-jar","/site_informativo.jar"]

I have also added jasperreports-fonts EXTENSION in pom.xml but THE PROBLEM CONTINUES.

<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.20.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports-fonts -->
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>6.20.0</version>
</dependency>

Some more context

If I do

FROM openjdk:17-oracle
EXPOSE 10093
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} site_informativo.jar

ENTRYPOINT ["java","-jar","/site_informativo.jar"]

I get

Font "Times New Roman" is not available to the JVM. See the Javadoc for more details.


Solution

  • Solved by adjusting the dockerfile to install the proper microsoft fonts.

    FROM openjdk:17-alpine
    EXPOSE 10093
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} site_informativo.jar
     
    RUN apk add --no-cache msttcorefonts-installer fontconfig
    RUN update-ms-fonts
    
    ENTRYPOINT ["java","-jar","/site_informativo.jar"]
    

    References:

    How to install fonts in Docker?