unsatifiedlinkerror:/tmp/snappy-1.1.4-libsnappyjava.so加载共享库ld-linux-x86-64.so时出错2:没有这样的文件或目录

f87krz0w  于 2021-06-06  发布在  Kafka
关注(0)|答案(5)|浏览(1260)

我正在尝试在kubernetes中运行kafka streams应用程序。当我启动pod时,出现以下异常:

Exception in thread "streams-pipe-e19c2d9a-d403-4944-8d26-0ef27ed5c057-StreamThread-1"
java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.4-5cec5405-2ce7-4046-a8bd-922ce96534a0-libsnappyjava.so: 
Error loading shared library ld-linux-x86-64.so.2: No such file or directory 
(needed by /tmp/snappy-1.1.4-5cec5405-2ce7-4046-a8bd-922ce96534a0-libsnappyjava.so)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
        at java.lang.Runtime.load0(Runtime.java:809)
        at java.lang.System.load(System.java:1086)
        at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:179)
        at org.xerial.snappy.SnappyLoader.loadSnappyApi(SnappyLoader.java:154)
        at org.xerial.snappy.Snappy.<clinit>(Snappy.java:47)
        at org.xerial.snappy.SnappyInputStream.hasNextChunk(SnappyInputStream.java:435)
        at org.xerial.snappy.SnappyInputStream.read(SnappyInputStream.java:466)
        at java.io.DataInputStream.readByte(DataInputStream.java:265)
        at org.apache.kafka.common.utils.ByteUtils.readVarint(ByteUtils.java:168)
        at org.apache.kafka.common.record.DefaultRecord.readFrom(DefaultRecord.java:292)
        at org.apache.kafka.common.record.DefaultRecordBatch$1.readNext(DefaultRecordBatch.java:264)
        at org.apache.kafka.common.record.DefaultRecordBatch$RecordIterator.next(DefaultRecordBatch.java:563)
        at org.apache.kafka.common.record.DefaultRecordBatch$RecordIterator.next(DefaultRecordBatch.java:532)
        at org.apache.kafka.clients.consumer.internals.Fetcher$PartitionRecords.nextFetchedRecord(Fetcher.java:1060)
        at org.apache.kafka.clients.consumer.internals.Fetcher$PartitionRecords.fetchRecords(Fetcher.java:1095)
        at org.apache.kafka.clients.consumer.internals.Fetcher$PartitionRecords.access$1200(Fetcher.java:949)
        at org.apache.kafka.clients.consumer.internals.Fetcher.fetchRecords(Fetcher.java:570)
        at org.apache.kafka.clients.consumer.internals.Fetcher.fetchedRecords(Fetcher.java:531)
        at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1146)
        at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1103)
        at org.apache.kafka.streams.processor.internals.StreamThread.pollRequests(StreamThread.java:851)
        at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:808)
        at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:774)
        at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:744)

以前,我尝试过使用docker容器启动kafka和kafka streams应用程序,它们运行得非常好。这是我第一次尝试与Kubernetes。
这是我的dockerfile streamsapp:

FROM openjdk:8u151-jdk-alpine3.7

COPY /target/streams-examples-0.1.jar /streamsApp/

COPY /target/libs /streamsApp/libs

CMD ["java", "-jar", "/streamsApp/streams-examples-0.1.jar"]

我能做些什么来解决这个问题?请帮帮我。
编辑:

/ # ldd /usr/bin/java 
    /lib/ld-musl-x86_64.so.1 (0x7f03f279a000)
Error loading shared library libjli.so: No such file or directory (needed by /usr/bin/java)
    libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f03f279a000)
Error relocating /usr/bin/java: JLI_Launch: symbol not found
9q78igpj

9q78igpj1#

我已经实现了一个docker映像,我用它运行了一个SpringBoot微服务,kafka-strean拓扑结构运行得非常好。
在这里我共享dockerfile文件。

FROM openjdk:8-jdk-alpine

# Add Maintainer Info

LABEL description="Spring Boot Kafka Stream IoT Processor"

# Args for image

ARG PORT=8080

RUN apk update && apk upgrade && apk add --no-cache gcompat
RUN ln -s /bin/bash /usr/bin
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY resources/wait-for-it.sh  wait-for-it.sh
COPY target/iot_processor.jar app.jar

RUN dos2unix wait-for-it.sh
RUN chmod +x wait-for-it.sh
RUN uname -a
RUN pwd
RUN ls -al

EXPOSE ${PORT}

CMD ["sh", "-c", "echo 'waiting for 300 seconds for kafka:9092 to be accessable before 
starting application' && ./wait-for-it.sh -t 300 kafka:9092 -- java -jar app.jar"]

希望它能帮助别人

sigwle7e

sigwle7e2#

错误消息指出*libsnappyjava.so找不到ld-linux-x86-64.so.2。这是一个glibc动态加载程序,而alpine image不运行glibc。您可以通过在dockerfile中安装libc6 compat包来运行它,例如:

RUN apk update && apk add --no-cache libc6-compat
yruzcnhs

yruzcnhs3#

看起来很奇怪,但看起来像你用的 Docker 的形象-openjdk:8u151-jdk-alpine3.7 is 不一致,并且一些动态加载的对象没有包含在包中,或者您需要在此映像中运行“ldconfig-v”来更新共享对象的Map,或者,最后,有/etc/ld.so.conf,其中包含指向os正在查找.so对象的位置的路径。如果您不想在调试时浪费时间,请考虑使用另一个提供java二进制文件的docker映像。最后但并非最不重要的是,在阿尔卑斯山论坛上寻求补救。

xmd2e60i

xmd2e60i4#

在我的例子中,安装丢失的libc6 compat失败了。应用程序仍然抛出 java.lang.UnsatisfiedLinkError .
然后我在码头发现, /lib64/ld-linux-x86-64.so.2 存在并链接到 /lib/libc.musl-x86_64.so.1 ,但是 /lib 仅包含 ld-musl-x86_64.so.1 ,不是 ld-linux-x86-64.so.2 .
所以我添加了一个名为 ld-linux-x86-64.so.2 链接到 ld-musl-x86_64.so.1/lib 指导并解决问题。
我使用的dockerfile:

FROM openjdk:8-jre-alpine
COPY entrypoint.sh /entrypoint.sh
RUN apk update && \
  apk add --no-cache libc6-compat && \
  ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2 && \
  mkdir /app && \
  chmod a+x /entrypoint.sh
COPY build/libs/*.jar /app
ENTRYPOINT ["/entrypoint.sh"]

总之:

RUN apk update && apk add --no-cache libc6-compat
ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
a8jjtwal

a8jjtwal5#

这个问题有两种解决方法:
您可以使用预装的其他基本映像 snappy-java 图书馆。例如 openjdk:8-jre-slim 对我来说很好
另一个解决办法是继续使用 openjdk:8-jdk-alpine 映像为基本映像,然后安装 snappy-java 手动创建库:

FROM openjdk:8-jdk-alpine
RUN apk update && apk add --no-cache gcompat
...

相关问题