11

来自Spring Microservices in Action:我正在尝试使用Docker Maven 插件构建 docker 映像,以将 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

与 Dockerfile 中第 4 步相关的输出:

...

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

4 回答 4

10

不知何故,在下载 jce zip 文件时,alpine linux 发行版上的 curl 无法正确设置 cookie 标头。它似乎下载了一个 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
于 2019-05-17T21:23:56.587 回答
4

我找到解决的链接

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
于 2019-04-17T05:46:48.077 回答
3

您的jce_policy-8.zip存档可能被识别为压缩存档并被ADD指令扩展。如果是这样,您可以跳过下一行的解压缩。或者,切换到COPY不对本地档案进行特殊处理的指令。

一般来说,我建议始终使用该COPY指令从构建上下文中引入文件和目录。仅ADD在您特别需要额外的拆包行为时使用。

于 2019-02-06T00:41:19.837 回答
3

也许这与unzipalpine 中的命令提供了busybox而不是标准的解压缩工具有关。

Busybox 确实有与此错误相关的错误: https ://bugs.busybox.net/show_bug.cgi?id=8821

这是一个相关问题,包含更多详细信息: https ://github.com/wahern/luaossl/issues/103

作为一种解决方法,安装标准unzip命令应该可以工作。

于 2019-08-14T12:20:12.233 回答