adoptium / adoptium-support

For end-user problems reported with our binary distributions
Apache License 2.0
45 stars 15 forks source link

eclipse-temurin:8u392-b08-jdk-alpine java.lang.UnsatisfiedLinkError: /opt/java/openjdk/jre/lib/amd64/libfontmanager.so #985

Closed hzfq closed 8 months ago

hzfq commented 8 months ago

Question

My application is running with spring-boot:2.3.10.RELEASE and eclipse-temurin:8u392-b08-jdk-alpine, the core code following,

@SpringBootApplication
public class App {

  private static final Logger logger = LoggerFactory.getLogger(App.class);

  public static void main(String[] args) throws Exception {
    SpringApplication.run(App.class, args);

    String[] names = GraphicsEnvironment.getLocalGraphicsEnvironment()
        .getAvailableFontFamilyNames();

    logger.info("Found " + names.length + " fonts:");

    for (String name : names) {
      logger.info(name);
    }
  }
}

my Dockerfile following,

FROM eclipse-temurin:8u392-b08-jdk-alpine
WORKDIR /app/
COPY target/springboot-demo-1.0.jar app.jar
ENV JAVA_OPTS=""
ENV ARGS=""
EXPOSE 8080
ENTRYPOINT ["sh", "-c","java $JAVA_OPTS -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar $ARGS"]

my docker build command is

docker build -t springboot-demo:1.0 -f Dockerfile .

my docker run command is

docker run -d --name springboot-demo -p 8080:8080 springboot-demo:1.0

then the application throwing exception

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.UnsatisfiedLinkError: /opt/java/openjdk/jre/lib/amd64/libfontmanager.so: Error loading shared library libgcc_s.so.1: No such file or directory (needed by /opt/java/openjdk/jre/lib/amd64/libfontmanager.so)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1838)
        at java.lang.Runtime.loadLibrary0(Runtime.java:843)
        at java.lang.System.loadLibrary(System.java:1136)
        at sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:61)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.FontManagerNativeLibrary.<clinit>(FontManagerNativeLibrary.java:32)
        at sun.font.SunFontManager$1.run(SunFontManager.java:346)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.<clinit>(SunFontManager.java:342)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:82)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
        at sun.java2d.SunGraphicsEnvironment.getFontManagerForSGE(SunGraphicsEnvironment.java:190)
        at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:224)
        at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:252)
        at sun.java2d.HeadlessGraphicsEnvironment.getAvailableFontFamilyNames(HeadlessGraphicsEnvironment.java:94)
        at org.example.App.main(App.java:30)
        ... 8 more

How should I solve this problem?

Context

Java version: eclipse-temurin:8u392-b08-jdk-alpine

Your operating system and platform:

centos: CentOS Linux release 7.4.1708 (Core) docker: 24.0.7

karianna commented 8 months ago

@hzfq try adding an install for libfreetype6 as part of your docker file

hzfq commented 8 months ago

thx, I tried the above method, but the problem still exists. End, I resolved the problem through adding libgcc as part of Dockerfile.

In addition, I recommend adding freetype and libgcc to the dockerfile because these two libraries are used frequently.

Finally, in the process of solving the above problem, I discovered a new problem.

# problem position: 
# https://github.com/adoptium/containers/blob/main/8/jdk/alpine/Dockerfile
rm -f /tmp/openjdk.tar.gz ${JAVA_HOME}/lib/src.zip;

Here, the correct absolute path of src.zip is ${JAVA_HOME}/src.zip