Docker Hub鏡像構建錯誤:returned a non-zero code: 8

對於同一個Dockerfile,Docker Hub不同時間來進行構建會出現不同的結果,如下構建Tomcat的鏡像爲例:
# 基於centos6基礎鏡像
FROM centos:6
MAINTAINER chenyufeng "[email protected]"

# 設置當前工具目錄
# 該命令不會新增鏡像層
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" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \
    tar -xvzf jdk-8u131-linux-x64.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" http://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 http://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 "[email protected]"

# 設置當前工具目錄
# 該命令不會新增鏡像層
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" http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz && \
    tar -xvzf jdk-8u162-linux-x64.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。Docker Hub對上面的鏡像自動構建後的結果如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章