Docker und Java - FontConfiguration Ausgabe

phoenix7360:

Wir haben eine Java-Anwendung, die Word-Dokumente mit einer dritten Partei erzeugt (Asposee aber ich glaube nicht, dass es wichtig ist hier). Die App ist von einer einfachen Docker-Datei erstellt:

FROM openjdk:10-jdk-slim
COPY target/*.jar /opt/
CMD $JAVA_HOME/bin/java $JAVA_OPTS -jar /opt/*.jar

Wenn wir die Anwendung erstellen lokal ( mvn packagedann docker build) und die Anwendung auszuführen innen k8ses gut funktioniert.

Wenn wir jedoch das Bild in unserer CI / CD-Pipeline mit Jenkins bauen wir eine Laufzeitausnahme erhalten, wenn sie durch einen bestimmten Prozess ausgeführt wird, die offenbar zusätzliche Schriftarten erfordert:

Caused by: java.lang.NullPointerException: null
    at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1288)
    at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
    at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
    at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:765)
    at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:440)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:385)
    at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
    at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)

In diesem Fall wird das Projekt in Jenkins buit, vom Docker Bild zusammengestellt maven:3.5.4-jdk-10-slim.

Ich habe beide JAR-Dateien überprüft (lokal und von jenkins) und die Klassendateien sind die gleichen (wie erwartet).

In beiden Fällen ist es das gleiche Basis-Image so verstehe ich nicht, was der Unterschied sein könnte. Ist etwas anderes in Docker, wenn sie lokal vs in einem anderen Docker Behälter bauen?

BEARBEITEN

Wir haben in beiden Docker Bilder gesucht und fanden den folgenden Unterschied.

Da vor Ort gebaut Bild ls -l /usr/libzurückkehrt:

drwxr-xr-x  2 root root  4096 May  3  2017 X11
drwxr-xr-x  5 root root  4096 Apr 26 00:00 apt
drwxr-xr-x  2 root root  4096 May 26 08:31 binfmt.d
drwxr-xr-x  2 root root  4096 Jun  6 01:50 cgmanager
drwxr-xr-x  2 root root  4096 Jun  6 01:50 dbus-1.0
drwxr-xr-x  2 root root  4096 Jun  6 01:51 dconf
drwxr-xr-x  3 root root  4096 Jun  6 01:51 debug
drwxr-xr-x  3 root root  4096 Apr 20 10:08 dpkg
drwxr-xr-x  2 root root  4096 Jun  6 01:50 environment.d
drwxr-xr-x  3 root root  4096 Apr 25 04:56 gcc
drwxr-xr-x  2 root root  4096 Jun  6 01:51 glib-networking
drwxr-xr-x  2 root root  4096 Apr 26 00:00 init
drwxr-xr-x  1 root root  4096 Jun  6 01:51 jvm
drwxr-xr-x  3 root root  4096 Jun  6 01:50 kernel
lrwxrwxrwx  1 root root    20 Mar  4 09:49 libnih-dbus.so.1 -> libnih-dbus.so.1.0.0
-rw-r--r--  1 root root 34824 Mar  4 09:49 libnih-dbus.so.1.0.0
lrwxrwxrwx  1 root root    15 Mar  4 09:49 libnih.so.1 -> libnih.so.1.0.0
-rw-r--r--  1 root root 92184 Mar  4 09:49 libnih.so.1.0.0
drwxr-xr-x  3 root root  4096 Mar 29 19:47 locale
drwxr-xr-x  3 root root  4096 Jun  6 01:50 lsb
drwxr-xr-x  1 root root  4096 Jul 21  2017 mime
drwxr-xr-x  2 root root  4096 Jun  6 01:50 modprobe.d
drwxr-xr-x  2 root root  4096 May 26 08:31 modules-load.d
-rw-r--r--  1 root root   198 Jan 13 23:36 os-release
drwxr-xr-x  3 root root  4096 Jun  6 01:51 ssl
drwxr-xr-x  1 root root  4096 Jun  6 01:50 systemd
drwxr-xr-x  2 root root  4096 Jun  6 01:50 sysusers.d
drwxr-xr-x  2 root root  4096 Jul 21  2017 tar
drwxr-xr-x 15 root root  4096 Feb 11 20:06 terminfo
drwxr-xr-x  1 root root  4096 Jun  6 01:50 tmpfiles.d
drwxr-xr-x  1 root root  4096 Apr 26 00:00 udev
drwxr-xr-x  1 root root 16384 Jun  6 01:51 x86_64-linux-gnu

Aber im Inneren Jenkins gebaut Bild ls -l /usr/libliefert:

drwxr-xr-x  5 root root 4096 Jun 25 00:00 apt
drwxr-xr-x  3 root root 4096 Jul  3 01:00 debug
drwxr-xr-x  3 root root 4096 Apr 20 10:08 dpkg
drwxr-xr-x  3 root root 4096 Jun 17 03:36 gcc
drwxr-xr-x  2 root root 4096 Jun 25 00:00 init
drwxr-xr-x  1 root root 4096 Jul  3 01:00 jvm
drwxr-xr-x  1 root root 4096 Jul 12 11:00 locale
drwxr-xr-x  3 root root 4096 Jul  3 01:00 lsb
drwxr-xr-x  1 root root 4096 May 16 07:47 mime
-rw-r--r--  1 root root  198 Jan 13 23:36 os-release
drwxr-xr-x  3 root root 4096 Jul  3 01:00 ssl
drwxr-xr-x  3 root root 4096 Apr 20 10:08 systemd
drwxr-xr-x  2 root root 4096 May 16 07:47 tar
drwxr-xr-x 15 root root 4096 May 21 08:54 terminfo
drwxr-xr-x  2 root root 4096 Jun 25 00:00 tmpfiles.d
drwxr-xr-x  3 root root 4096 Jun 25 00:00 udev
drwxr-xr-x  2 root root 4096 May  3  2017 X11
drwxr-xr-x  1 root root 4096 Jul  3 01:00 x86_64-linux-gnu

Dies ist rätselhaft wirklich, wie ich dachte Docker würde immer das gleiche Bild aus identischen Dockerfiles erzeugen

phoenix7360:

Ich denke, dass wir das Problem gefunden.

Wenn auf Jenkins lauft wir verwenden , um das docker:dind(Docker innerhalb Docker) Docker Bild , um das zu schaffen dockerBefehl in der Build. Dieses Bild basiert auf AlpineLinux. Bei der Ausführung docker infoerhalten wir folgendes:

Mac OS X:

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

Auf Jenkins:

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

AlpineLinux müssen die Schriftarten fehlen. Wir setzten das Problem , indem sie manuell in der Installation 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

Nicht sicher, dass dies die minimal erforderlichen Bibliotheken aber die haben den Trick: D

Ich denke du magst

Origin http://43.154.161.224:23101/article/api/json?id=195801&siteId=1
Empfohlen
Rangfolge