UnsatisfiedLinkError: /tmp/snappy-1.1.4-libsnappyjava.so Ошибка загрузки общей библиотеки ld-linux-x86-64.so.2: такого файла или каталога нет - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь запустить приложение Kafka Streams в kubernetes. Когда я запускаю модуль, я получаю следующее исключение:

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)

Ранее я пытался запустить приложение kafka и kafka-streams-app, используя контейнеры Docker, и они работали отлично. Это первый раз, когда я пытаюсь с 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"]

Что я могу сделать, чтобы обойти эту проблему? Пожалуйста, помогите мне.

EDIT:

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

Ответы [ 3 ]

0 голосов
/ 02 августа 2018

В сообщении об ошибке указывается, что * libsnappyjava.so не может найти ld-linux-x86-64.so.2.Это динамический загрузчик glibc, а образ Alpine не работает с glibc.Вы можете попытаться запустить его, установив пакет libc6-compat в свой Dockerfile, например:

RUN apk update && apk add --no-cache libc6-compat
0 голосов
/ 08 апреля 2019

В моем случае установить отсутствующий 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 dir, и решаю проблему.

Dockerfile, который я использую:

FROM openjdk:8-jre-alpine
ENV TZ Asia/Shanghai
COPY entrypoint.sh /entrypoint.sh
RUN apk update && \
  apk add --no-cache tzdata && \
  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
0 голосов
/ 11 мая 2018

Это кажется странным, но выглядит как образ докера, который вы используете - openjdk: 8u151-jdk-alpine3.7 не соответствует и некоторые динамически загружаемые объекты не включены в пакет, или вам нужно запустить «ldconfig -v» в этом образе для обновления карта общих объектов, или, наконец, есть /etc/ld.so.conf с путями к местам, где ОС ищет объекты .so. Пожалуйста, рассмотрите возможность использования другого образа докера, предоставляющего двоичный файл Java, если вы не хотите терять время на его отладку. И последнее, но не менее важное: попросите лекарство на альпийском форуме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...