当我尝试从Dockerfile构建映像时,为什么会出现“ unzip:short read”的问题?

时间:2019-02-06 00:24:21

标签: docker dockerfile unzip alpine docker-maven-plugin

摘自Spring Microservices in Action:我正在尝试使用Docker Maven Plugin构建Docker映像,以将Java微服务作为Docker容器部署到云中。

Dockerfile:

np.resize
与Dockerfile中的第4步相关的

输出

In [82]: arr = np.arange(12).reshape(3,4)
In [83]: np.resize(arr,(6,4))
Out[83]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

为什么我会得到 resize 当我尝试构建图像时?

4 个答案:

答案 0 :(得分:3)

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

通常,我建议始终使用COPY指令从构建上下文中引入文件和目录。仅在特别需要额外的拆箱行为时使用ADD

答案 1 :(得分:2)

I'm find solved link

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

答案 2 :(得分:1)

以某种方式,下载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

答案 3 :(得分:0)

也许与以下事实有关:Alpine中的static async register(req, res) { try { const userFromBody = req.body let errors = {} if (userFromBody && userFromBody.password.length < 8) { errors.password = "Your password must be at least 8 characters." } if (userFromBody && userFromBody.name.length < 3) { errors.name = "You must specify a name of at least 3 characters." } if (Object.keys(errors).length > 0) { res.status(400).json(errors) return } 命令是由busybox提供的,而不是标准的解压缩工具。

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

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

作为解决方法,应该安装标准unzip命令。