Почему я получаю «unzip: short read», когда пытаюсь создать образ из Dockerfile? - PullRequest
0 голосов
/ 06 февраля 2019

Из Spring Microservices в действии book : я пытаюсь использовать Docker Maven Plugin для создания образа докера для развертывания микросервиса Java в качестве контейнера Dockerв облако.

Dockerfile:

FROM openjdk:8-jdk-alpine
RUN mkdir -p /usr/local/configserver
ADD jce_policy-8.zip /tmp/
RUN unzip /tmp/jce_policy-8.zip && \
    rm /tmp/jce_policy-8.zip && \
    yes | cp -v /tmp/UnlimitedJCEPolicyJDK8/*.jar /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
ADD @project.build.finalName@.jar /usr/local/configserver/
ADD run.sh run.sh
RUN chmod +x run.sh
CMD ./run.sh

Вывод , относящийся к шагу 4 в Dockerfile:

...

---> Using cache
---> dd33d4c12d29
Step 4/8 : RUN unzip /tmp/jce_policy-8.zip && rm /tmp/jce_policy-8.zip && yes | cp -v /tmp/UnlimitedJCEPolicyJDK8/*.jar /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/

---> Running in 1071273ceee5
Archive:  /tmp/jce_policy-8.zip
unzip: short read

Почему я получаю unzip: short read при попытке создать образ?

Ответы [ 4 ]

0 голосов
/ 14 августа 2019

Возможно, это связано с тем, что команда unzip в alpine предоставлена ​​busybox, а не стандартным средством распаковки.

В Busybox есть ошибки, связанные с этой ошибкой: https://bugs.busybox.net/show_bug.cgi?id=8821

Вот еще одна проблема, связанная с более подробной информацией: https://github.com/wahern/luaossl/issues/103

В качестве обходного пути должна работать стандартная команда unzip.

0 голосов
/ 17 апреля 2019

Я нашел решенную ссылку

FROM openjdk:8-jdk-alpine
RUN  apk update && apk upgrade && apk add netcat-openbsd && apk add curl
RUN mkdir -p /usr/local/configserver
RUN cd /tmp/ && \
    **curl -L -b "oraclelicense=a" http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip -O** && \
    unzip jce_policy-8.zip && \
    rm jce_policy-8.zip && \
    yes |cp -v /tmp/UnlimitedJCEPolicyJDK8/*.jar /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
ADD @project.build.finalName@.jar /usr/local/configserver/
ADD run.sh run.sh
RUN chmod +x run.sh
CMD ./run.sh
0 голосов
/ 18 мая 2019

Каким-то образом, curl в дистрибутиве Alpine Linux не может правильно установить заголовки cookie при загрузке jce zip-файла.Кажется, что он загружает ZIP-файл, но на самом деле это страница с ошибкой HTML.Если вы просматриваете файл, вы видите, что это HTML-файл.Я использовал wget вместо curl, и он успешно загрузил файл.Затем операция распаковки сработала как ожидалось.

FROM openjdk:8-jdk-alpine
RUN  apk update && apk upgrade && apk add netcat-openbsd
RUN mkdir -p /usr/local/configserver
RUN cd /tmp/ && \
    wget 'http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip' --header "Cookie: oraclelicense=accept-securebackup-cookie" && \
    unzip jce_policy-8.zip && \
    rm jce_policy-8.zip && \
    yes |cp -v /tmp/UnlimitedJCEPolicyJDK8/*.jar /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
ADD @project.build.finalName@.jar /usr/local/configserver/
ADD run.sh run.sh
RUN chmod +x run.sh
CMD ./run.sh
0 голосов
/ 06 февраля 2019

Возможно, ваш jce_policy-8.zip архив распознается как сжатый архив и расширяется инструкцией ADD.Если это так, вы можете пропустить разархивирование на следующей строке.Или переключитесь на инструкцию COPY, которая не выполняет специальной обработки локальных архивов.

В общем, я рекомендую всегда использовать инструкцию COPY для получения файлов и каталогов из контекста сборки.Используйте ADD только в том случае, если вам необходимо дополнительное распаковывание.

...