欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Docker Hub镜像构建错误:returned a non-zero code: 8

程序员文章站 2022-05-12 19:41:23
对于同一个Dockerfile,Docker Hub不同时间来进行构建会出现不同的结果,如下构建Tomcat的镜像为例: # 基于centos6基础镜像 FROM centos...

对于同一个Dockerfile,Docker Hub不同时间来进行构建会出现不同的结果,如下构建Tomcat的镜像为例:

# 基于centos6基础镜像

FROM centos:6

MAINTAINER chenyufeng "yufengcode@gmail.com"

# 设置当前工具目录

# 该命令不会新增镜像层

WORKDIR /home

# 安装必要的工具

RUN yum install -y wget && \

????rpm --rebuilddb && \

????yum install -y tar && \

????wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \

????tar -xvzf jdk-8u131-linux-x64.tar.gz && \

????wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz && \

????tar -xvzf apache-tomcat-8.0.48.tar.gz && \

????mv apache-tomcat-8.0.48/ tomcat && \

????rm -f jdk-8u131-linux-x64.tar.gz && \

????rm -f apache-tomcat-8.0.48.tar.gz && \????

????ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \

????yum clean all

# 设置环境变量

ENV JAVA_HOME /home/jdk1.8.0_131

ENV CATALINA_HOME /home/tomcat

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

ENV TZ Asia/Shanghai

# 暴露tomcat 8080端口

EXPOSE 8080

# 启动容器执行下面的命令

ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out

# 创建容器启动tomcat,由于ENTRYPOINT优先级比CMD高,所以这里的CMD不会执行

CMD ["/home/tomcat/bin/startup.sh"]

在3个月前构建成功(约2018年1月),但是2个月前就构建失败了(月2018年2月),期间镜像文件没有做任何的修改。

构建失败后报错如下:

Build failed: The command '/bin/sh -c yum install -y wget && rpm --rebuilddb && yum install -y tar && wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && tar -xvzf jdk-8u131-linux-x64.tar.gz && wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz && tar -xvzf apache-tomcat-8.0.48.tar.gz && mv apache-tomcat-8.0.48/ tomcat && rm -f jdk-8u131-linux-x64.tar.gz && rm -f apache-tomcat-8.0.48.tar.gz && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && yum clean all' returned a non-zero code: 8

这是因为Docker Hub其实也会不定期的修改源,可能今天能下载某个包,但是明天可能就不能下载了。问题就出现在镜像文件中的jdk和tomcat,由于几个月过去了,上面的jdk、tomcat版本已经比较旧了,导致Docker Hub下载失败。所以如果出现“returned a non-zero code: 8”这种问题,很有可能是镜像文件中的某些软件版本很老了,导致Docker Hub下载失败。所以镜像文件并不是写完就一劳永逸了,也是要不断进行更新的。修改上述的Dockerfile如下就可以构建成功了:

# 基于centos6基础镜像

FROM centos:6

MAINTAINER chenyufeng "yufengcode@gmail.com"

# 设置当前工具目录

# 该命令不会新增镜像层

WORKDIR /home

# 安装必要的工具

RUN yum install -y wget && \

????rpm --rebuilddb && \

????yum install -y tar && \

????wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz && \

????tar -xvzf jdk-8u162-linux-x64.tar.gz && \

????wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.29/bin/apache-tomcat-8.5.29.tar.gz && \

????tar -xvzf apache-tomcat-8.5.29.tar.gz && \

????mv apache-tomcat-8.5.29/ tomcat && \

????rm -f jdk-8u162-linux-x64.tar.gz && \

????rm -f apache-tomcat-8.5.29.tar.gz && \????

????ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \

????yum clean all

# 设置环境变量

ENV JAVA_HOME /home/jdk1.8.0_162

ENV CATALINA_HOME /home/tomcat

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

ENV TZ Asia/Shanghai

# 暴露tomcat 8080端口

EXPOSE 8080

# 启动容器执行下面的命令

ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out

# 创建容器启动tomcat,由于ENTRYPOINT优先级比CMD高,所以这里的CMD不会执行

CMD ["/home/tomcat/bin/startup.sh"]

也就是把jdk和tomcat提高到当前版本下的最新更新。还需要注意的是,在每一次修改Dockerfile后进行构建,不仅要构建latest版本,还要构建指定具体版本号1.*的版本。也就是一定要对镜像本身进行版本控制和release。