Docker and Java - FontConfiguration issue

Installing libfontconfig1 solved the problem for me (source):

RUN apt-get install -y libfontconfig1 && rm -rf /var/lib/apt/lists/*

I think we found the problem.

When running on Jenkins we use the docker:dind (Docker inside docker) Docker image to provide the docker command in the build. This image is based on Alpine linux. When running docker info we get the following:

On Mac:

Kernel Version: 4.9.87-linuxkit-aufs
Operating System: Docker for Mac

On Jenkins:

Kernel Version: 4.4.115-k8s
Operating System: Alpine Linux v3.7 (containerized)

Alpine linux must be missing those fonts. We fixed the problem by manually installing them in the Dockerfile:

RUN apt-get update \
 && apt-get install --assume-yes apt-utils \
 && apt-get install --assume-yes software-properties-common \
 && apt-get install --assume-yes dbus \
 && apt-get install --assume-yes cgmanager \
 && apt-get install --assume-yes glib-networking \
 && apt-get install --assume-yes libnih-dbus-dev \
 && apt-get install --assume-yes dconf-cli \
 && apt-get install --assume-yes fontconfig

Not sure this is the minimum required libraries but those did the trick :D


With openjdk:8u111-jdk-alpine, installing dejavu fix the problem:

For example:

Dockerfile:

FROM openjdk:8u111-jdk-alpine
# Needed to fix 'Fontconfig warning: ignoring C.UTF-8: not a valid language tag'
ENV LANG en_GB.UTF-8

# JRE fails to load fonts if there are no standard fonts in the image; DejaVu is a good choice,
# see https://github.com/docker-library/openjdk/issues/73#issuecomment-207816707
RUN apk add --update ttf-dejavu && rm -rf /var/cache/apk/*

VOLUME /tmp
COPY /target/*.jar app.jar
ENTRYPOINT ["java","-Xmx100m","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]