web-dev-qa-db-fra.com

UnsatisfiedLinkError: /tmp/snappy-1.1.4-libsnappyjava.so Erreur lors du chargement de la bibliothèque partagée ld-linux-x86-64.so.2: aucun fichier ou répertoire de ce type

J'essaie d'exécuter une application Kafka Streams dans kubernetes. Lorsque je lance le pod, j'obtiens l'exception suivante:

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)

Auparavant, j'ai essayé de lancer kafka et kafka-streams-app en utilisant des conteneurs Docker et ils ont parfaitement fonctionné. C'est la première fois que j'essaie avec Kubernetes.

C'est mon 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"]

Que puis-je faire pour surmonter ce problème? Veuillez m'aider.

MODIFIER:

/ # 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
13
el323

Le message d'erreur indique que * libsnappyjava.so ne peut pas trouver ld-linux-x86-64.so.2. Il s'agit d'un chargeur dynamique glibc, tandis que l'image Alpine ne fonctionne pas avec la glibc. Vous pouvez essayer de le faire fonctionner en installant le paquet compatible libc6 dans votre Dockerfile, par exemple:

RUN apk update && apk add --no-cache libc6-compat
16
raspy

Dans mon cas, l'installation de la compatibilité libc6 manquante n'a pas fonctionné. L'application lance toujours Java.lang.UnsatisfiedLinkError.

Ensuite, je trouve dans le docker, /lib64/ld-linux-x86-64.so.2 existe et est un lien vers /lib/libc.musl-x86_64.so.1, mais /lib contient uniquement ld-musl-x86_64.so.1, ne pas ld-linux-x86-64.so.2.

J'ajoute donc un fichier nommé ld-linux-x86-64.so.2 lié à ld-musl-x86_64.so.1 dans /lib dir et résoudre le problème.

Dockerfile que j'utilise:

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"]

En conclusion:

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
15
Kay Wu

Il existe deux solutions à ce problème:

  1. Vous pouvez utiliser une autre image de base avec la librairie snappy-Java Préinstallée. Par exemple, openjdk:8-jre-slim Me convient:

  2. Et l'autre solution consiste à toujours utiliser l'image openjdk:8-jdk-Alpine Comme base, mais à installer la bibliothèque snappy-Java Manuellement:

FROM openjdk:8-jdk-Alpine
RUN apk update && apk add --no-cache gcompat
...
0
Ivan Kovbas

Cela semble étrange, mais ressemble à l'image de docker que vous utilisez - openjdk: 8u151-jdk-Alpine3.7 est incohérent, et certains objets chargés dynamiquement ne sont pas inclus dans le package, ou vous devez exécuter "ldconfig -v" dans cette image pour mettre à jour la carte des objets partagés, ou, enfin, il y a /etc/ld.so.conf avec les chemins vers les endroits où OS recherche des objets .so. Veuillez envisager d'utiliser une autre image docker fournissant Java binaire si vous ne voulez pas perdre de temps à le déboguer. Enfin et surtout, demandez un remède sur le forum Alpine.

0
d0bry