如何在CentOS中编写Tomcat容器Dockerfile避免非零代码1错误?
问题原因与解决办法
错误原因
你使用的CentOS 8基础镜像的官方软件源已终止维护(CentOS 8在2021年底停止更新,2024年彻底归档),yum工具在访问appstream仓库时无法获取有效的镜像地址列表,导致元数据下载失败,最终执行yum install java -y命令返回非零错误码,构建中断。
解决办法
方案1:更换为仍受支持的基础镜像
推荐使用CentOS 7(仍有维护支持)、CentOS Stream 9或其他主流发行版镜像(如Ubuntu、Alpine),以下是基于CentOS 7的完整Dockerfile示例:
# 采用CentOS 7作为基础镜像 FROM centos:7 # 安装Java开发环境及wget工具,清理yum缓存减少镜像体积 RUN yum install -y java-1.8.0-openjdk-devel wget && \ yum clean all # 下载并解压Apache Tomcat 9(可根据需求替换版本) RUN wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz && \ tar -xzf apache-tomcat-9.0.85.tar.gz -C /usr/local/ && \ rm apache-tomcat-9.0.85.tar.gz # 设置Tomcat环境变量 ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.85 ENV PATH $CATALINA_HOME/bin:$PATH # 暴露Tomcat默认服务端口 EXPOSE 8080 # 启动Tomcat服务 CMD ["catalina.sh", "run"]
方案2:保留CentOS 8,替换为归档源
如果必须使用CentOS 8镜像,需将官方源替换为CentOS归档仓库,修改Dockerfile如下:
# 使用CentOS 8基础镜像 FROM centos:8 # 替换yum源为CentOS归档仓库 RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \ sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* # 安装Java开发环境并清理缓存 RUN yum install -y java-1.8.0-openjdk-devel && \ yum clean all # 下载并配置Tomcat(同方案1) RUN wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz && \ tar -xzf apache-tomcat-9.0.85.tar.gz -C /usr/local/ && \ rm apache-tomcat-9.0.85.tar.gz ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.85 ENV PATH $CATALINA_HOME/bin:$PATH EXPOSE 8080 CMD ["catalina.sh", "run"]
内容的提问来源于stack exchange,提问作者Abd-98
相关产品推荐
相关产品推荐

