基于alpine的Java与docker

基于alpine的Java与docker,java,docker,glibc,alpine,Java,Docker,Glibc,Alpine,我有一个Java应用程序,我想在alpine中运行。它有一个GUI。我正在建立一个基于阿尔卑斯山/最新的图像。安装了所有必需的软件包后,在运行应用程序时,我看到以下错误: [ERROR] [system.err] GLib (gthread-posix.c): Unexpected error from C library during 'pthread_cond_init': Invalid argument. Aborting. 在我看来,这似乎是glibc与glibclibrary的版

我有一个Java应用程序,我想在alpine中运行。它有一个GUI。我正在建立一个基于阿尔卑斯山/最新的图像。安装了所有必需的软件包后,在运行应用程序时,我看到以下错误:

[ERROR] [system.err] GLib (gthread-posix.c): Unexpected error from C library during 'pthread_cond_init': Invalid argument.  Aborting.
在我看来,这似乎是glibc与
glibc
library的版本兼容性问题。 有关已安装glib的信息:

bash-4.3# apk info glib
glib-2.50.2-r0 description:
Common C routines used by Gtk+ and other libs
glib-2.50.2-r0 webpage:
http://www.gtk.org
glib-2.50.2-r0 installed size:
2957312
bash-4.3# 
不确定它是否相关,但在libjvm上执行ldd。因此,有以下情况:

bash-4.3# ldd /opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so
    ldd (0x7f3257095000)
    libm.so.6 => ldd (0x7f3257095000)
    libdl.so.2 => ldd (0x7f3257095000)
    libpthread.so.0 => ldd (0x7f3257095000)
    libc.so.6 => ldd (0x7f3257095000)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so)
Error relocating /opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so: __getpagesize: symbol not found
Error relocating /opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so: gnu_get_libc_release: symbol not found
Error relocating /opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so: __isnan: symbol not found
Error relocating /opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so: gnu_get_libc_version: symbol not found
Error relocating /opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so: dlvsym: symbol not found
bash-4.3# 
我还对我试图运行的命令进行了扫描:

access("/opt/jdk1.8.0_112/lib/amd64/libjava.so", F_OK) = -1 ENOENT (No such file or directory)
access("/opt/jdk1.8.0_112/jre/lib/amd64/libjava.so", F_OK) = 0
open("/opt/jdk1.8.0_112/jre/lib/amd64/jvm.cfg", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=627, ...}) = 0
read(3, "# Copyright (c) 2003, 2013, Orac"..., 4096) = 627
read(3, "", 4096)                       = 0
close(3)                                = 0
stat("/opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so", {st_mode=S_IFREG|0755, st_size=16989811, ...}) = 0
getgid()                                = 0
getegid()                               = 0
getuid()                                = 0
geteuid()                               = 0
futex(0x7f7c894f90c8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
open("/opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\350!\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=16989811, ...}) = 0
mmap(NULL, 16717288, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7c87f68000
mprotect(0x7f7c88c36000, 2097152, PROT_NONE) = 0
mmap(0x7f7c88e36000, 888832, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xcce000) = 0x7f7c88e36000
mmap(0x7f7c88f0f000, 304616, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7c88f0f000
close(3)                                = 0
open("/opt/jdk1.8.0_112/bin/../lib/amd64/jli/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/jdk1.8.0_112/bin/../lib/amd64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/glibc-compat/lib/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260U\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1059160, ...}) = 0
mmap(NULL, 3154224, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7c87c65000
mprotect(0x7f7c87d67000, 2093056, PROT_NONE) = 0
mmap(0x7f7c87f66000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x101000) = 0x7f7c87f66000
close(3)                                = 0
mprotect(0x7f7c87f66000, 4096, PROT_READ) = 0
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f7c89a48000
mprotect(0x7f7c89a48000, 4096, PROT_NONE) = 0
clone(child_stack=0x7f7c89b47ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f7c89b489d0, tls=0x7f7c89b48700, child_tidptr=0x7f7c89b489d0) = 337
futex(0x7f7c89b489d0, FUTEX_WAIT, 337, NULLGLib (gthread-posix.c): Unexpected error from C library during 'pthread_cond_init': Invalid argument.  Aborting.
 <unfinished ...>
+++ killed by SIGABRT +++
access(“/opt/jdk1.8.0_112/lib/amd64/libjava.so”,F_OK)=-1 enoint(没有这样的文件或目录)
access(“/opt/jdk1.8.0_112/jre/lib/amd64/libjava.so”,F_OK)=0
打开(“/opt/jdk1.8.0_112/jre/lib/amd64/jvm.cfg”,O_RDONLY)=3
fstat(3,{st_mode=S_IFREG | 0644,st_size=627,…})=0
阅读(3),“版权(c)2003、2013、Orac”…,4096)=627
读(3,“,4096)=0
关闭(3)=0
stat(“/opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so”,{st_mode=S_IFREG | 0755,st_size=16989811,…})=0
getgid()=0
getegid()=0
getuid()=0
geteuid()=0
futex(0x7f7c894f90c8,futex_WAKE_PRIVATE,2147483647)=0
打开(“/opt/jdk1.8.0_112/jre/lib/amd64/server/libjvm.so”,O_RDONLY | O_CLOEXEC)=3
读取(3),“\177ELF\2\1\1\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0p\350!\0\0\0\0\0”…,832)=832
fstat(3,{st_mode=S_IFREG | 0755,st_size=16989811,…})=0
mmap(空,16717288,保护读取,保护执行,映射私有,映射DENYWRITE,3,0)=0x7f7c87f68000
M保护(0x7f7c88c36000、2097152、无保护)=0
mmap(0x7f7c88e36000,888832,保护读取,保护写入,映射私有,映射固定,映射DENYWRITE,3,0xcce000)=0x7f7c88e36000
mmap(0x7F7C88F000,304616,保护读取,保护写入,映射私有,映射固定,映射匿名,-1,0)=0x7F7C88F000
关闭(3)=0
open(“/opt/jdk1.8.0_112/bin/。/lib/amd64/jli/libm.so.6”,O|RDONLY | O|u CLOEXEC)=-1 enoint(没有这样的文件或目录)
打开(“/opt/jdk1.8.0_112/bin/。/lib/amd64/libm.so.6”,O|RDONLY | O|u CLOEXEC)=-1 enoint(没有这样的文件或目录)
open(“/usr/glibc compat/lib/libm.so.6”,O|RDONLY | O|CLOEXEC)=3
读(3),“\177ELF\2\1\1\3\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\260U\0\0\0\0\0\0\0”…,832)=832
fstat(3,{st_mode=S_IFREG | 0755,st_size=1059160,…})=0
mmap(空,3154224,保护读取,保护执行,映射私有,映射DENYWRITE,3,0)=0x7f7c87c65000
M保护(0x7f7c87d67000、2093056、无保护)=0
mmap(0x7f7c87f66000,8192,保护读写,映射私有,映射固定,映射DENYWRITE,0x101000)=0x7f7c87f66000
关闭(3)=0
M保护(0x7f7c87f66000,4096,保护读取)=0
mmap(NULL,1052672,保护读取,保护写入,映射私有,映射匿名,映射堆栈,-1,0)=0x7f7c89a48000
M保护(0x7f7c89a48000、4096、保护无)=0
克隆(child_stack=0x7f7c89b47ff0,flags=clone_VM | clone_FS | clone_FILES | clone_signand | clone_THREAD | clone_SYSVSEM | clone| clone|SETTID | clone| child | CLEARTID | PARENT | tidptr
futex(0x7f7c89b489d0,futex_WAIT,337,NULLGLib(gthread posix.c):在“pthread_cond_init”期间c库出现意外错误:参数无效。正在中止。
+++被西格伯特杀死+++
有什么建议吗?

你用什么? 它应该是现成的。 如果只使用普通的alpine图像,它可能会遗漏java所需的一些内容

您是否使用java.awt.headless=true启动应用程序

有关JavaFX,请参见

您应该安装xvfb并重试。

是否使用? 它应该是现成的。 如果只使用普通的alpine图像,它可能会遗漏java所需的一些内容

您是否使用java.awt.headless=true启动应用程序

有关JavaFX,请参见


您应该安装xvfb并重试。

我最近在Alpine Docker映像中使用openjdk8时遇到了一些不好的经验。
香草映像加上java8在没有明确原因的情况下生成了一些核心转储。
我将相同的设置移到了openjdk Docker映像(debian)上,它运行得很顺利。

我最近在Alpine Docker映像中使用openjdk8时有一些不好的经验。
香草映像加上java8在没有明确原因的情况下生成了一些核心转储。
我将相同的设置移动到openjdk Docker映像(debian)它运行平稳。

glib!=glibc。Alpine不使用glibc,但使用musl libc。Oracle JDK仅作为与glibc链接的二进制文件提供,因此它在Alpine上不起作用。您尝试过Alpine的openjdk8包吗?我不确定我们是否使用javafx支持构建它。嗯,我们不使用javafx支持构建openjdk8。因此您可以尝试添加它进入并发送拉取请求,或者等到有人这样做。glib!=glibc。Alpine不使用glibc,但使用musl libc。Oracle JDK只能作为与glibc链接的二进制文件使用,因此它在Alpine上不起作用。您尝试过Alpine的openjdk8包吗?我不确定我们是否使用javafx支持构建它。嗯,我们不使用javafx构建openjdk8支持。因此,您可以尝试将其添加到中并发送拉取请求,或者等到有人这样做。