gpt4 book ai didi

java - Alpine Linux,非根用户,Java 7,Setcap : libjli. 所以:没有这样的文件或目录(java 需要)

转载 作者:太空狗 更新时间:2023-10-29 12:40:42 29 4
gpt4 key购买 nike

在我创建的 Alpine Linux docker 容器上。我已经设置了一个非 root 用户来运行我的 java (jboss) 服务器。我试图授予它在 < 1024 端口上运行的权限。因此,我不得不使用 setcap 来为 Java 提供在 < 1024 端口上运行的权限。

请注意,Alpine Linux 上尚不存在 authbind,因此这不是一个选项。 Setcap 是推荐的方法。见最后评论:https://github.com/gliderlabs/docker-alpine/issues/166

$ setcap cap_net_bind_service=+eip /opt/jdk1.7.0_51/bin/java \    
cap_net_bind_service=+eip /opt/jdk1.7.0_51/jre/bin/java

但是,根据 Oracle,有一个已知错误(和解决方法)可以解决 setcap 问题: http://bugs.java.com/view_bug.do?bug_id=7157699

基本上,他们建议创建一个包含以下内容的文件。请注意,我将java安装到“/opt/jdk1.7.0_51”,这是64位版本,所以目录路径不同。

$ mkdir -p /etc/ld.so.conf.d
$ echo "/opt/jdk1.7.0_51/jre/lib/amd64/jli" > /etc/ld.so.conf.d/java.conf
$ cat /etc/ld.so.conf.d/java.conf
/opt/jdk1.7.0_51/jre/lib/amd64/jli

然而,这并没有奏效。我还尝试创建文件链接:

$ ln -s /opt/jdk1.7.0_51/jre/lib/amd64/jli/libjli.so /lib64/
$ ls -al /lib64
...
... libjli.so -> /opt/jdk1.7.0_51/jre/lib/amd64/jli/libjli.so
...
$ ls /opt/jdk1.7.0_51/jre/lib/amd64/jli/
libjli.so

这也没有用。我已尝试使用 ldconfig 按照原始帖子中的建议调试问题:

$ ldconfig | grep libjli

这行不通。 Alpine 运行 ldconfig 的客户版本,文档很少,所以我还没有弄清楚该怎么做。

无论如何,每次我尝试使用 ldd 进行调试时,我仍然会收到此错误:

$ /opt/jdk1.7.0_51/jre/bin$ ldd java
/lib64/ld-linux-x86-64.so.2 (0x55901c23e000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x55901c23e000)
Error loading shared library libjli.so: No such file or directory (needed by java)
libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x55901c23e000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x55901c23e000)
Error relocating java: JLI_Launch: symbol not found

我不知道在这一点上我还能做些什么。我想避免再次更改我们的软件以使其在 alpine 下工作,因为这需要一个发布过程并且可能会影响尚未使用 Docker 的客户。我真的不想再次接触这些端口,因为它们在 root 下工作。我将不得不通过另一个调试过程来配置负载平衡器、docker 端口重定向、自定义重新编译和调试我们的软件,然后重新测试以上所有内容以确保我们的自动化脚本全部正确部署。这是我希望避免的事情。

有人有建议吗?

最佳答案

libjli.so 的问题似乎是 Oracle JDK 是使用 glibc 构建的,而 Alpine 使用 musl libc。

为此打开了 Java 8 的问题,我想它们也适用于 Java 7:

this Docker image为 Alpine 提供 glibc,您可以将其用作基础。它已被用于构建 Oracle JDK 8 image .

关于java - Alpine Linux,非根用户,Java 7,Setcap : libjli. 所以:没有这样的文件或目录(java 需要),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45173910/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com