项目场景:

在使用docker利用Dockerfile生成镜像时


问题描述

Dockerfile生成镜像时,遇到的报错:failed to copy files: Error processing tar file(exit status 1): unexpected EOF

原来的Dockerfile内容:

FROM centos7-ssh

ADD jdk-8u212-linux-x64.tar.gz /usr/local/jdk1.8.0_212

RUN sudo mv /usr/local/jdk1.8.0_212 /usr/local/jdk

ENV JAVA_HOME /home/hadoop/jdk

ENV PATH $JAVA_HOME/bin:$PATH



ADD hadoop-3.1.3.tar.gz /usr/local/hadoop-3.1.3

RUN sudo mv /usr/local/hadoop-3.1.3 /usr/local/hadoop

ENV HADOOP_HOME /home/hadoop/hadoop

ENV PATH $HADOOP_HOME/bin:$PATH

运行截图:

文件目录:


原因分析:

很奇怪,jdk的压缩包加载时没有报错,hadoop的压缩包加载时却报错了,找了很多资料试了很多次都没有解决,估计是我hadoop的压缩包出了某种问题,最后决定“曲线救国”。我的目的是将jdk和hadoop这两个依赖的文件上传到镜像,ADD命令不行,那就换COPY命令,将压缩包解压后COPY过去就行了。ADD命令的作用:将本地文件添加到镜像中,tar类型文件会自动解压,可以访问网络资源,但网络压缩资源不会被解压。COPY命令的作用:将本地文件添加到镜像中,但是不会自动解压文件,也不能访问网络资源。


解决方案:

修改后的Dockerfile文件:

FROM centos7-ssh

COPY jdk1.8.0_212 /usr/local/jdk

ENV JAVA_HOME /usr/local/jdk

ENV PATH $JAVA_HOME/bin:$PATH

COPY hadoop-3.1.3 /usr/local/hadoop

ENV HADOOP_HOME /usr/local/hadoop

ENV PATH $HADOOP_HOME/bin:$PATH

Logo

鸿蒙生态一站式服务平台。

更多推荐