CentOS 7 Docker镜像构建时yum安装进程卡住问题求助
解决Docker构建时yum安装卡住的问题
问题定位
从你提供的Dockerfile和yum输出来看,卡住的核心原因是CentOS 7默认软件源中没有temurin-11-jdk包,yum会持续搜索该包导致进程挂起;另外,多步yum操作和未优化的源配置也可能加剧卡住的概率。
解决方案
修改Dockerfile,补充temurin的软件源,同时优化yum命令参数避免卡住:
FROM centos:7 # 配置DNS解析,避免域名解析延迟 RUN set -ex && echo 'hosts: files dns' > /etc/nsswitch.conf # 添加Docker CE源并安装Docker组件,禁用fastestmirror避免源选择卡住 RUN set -ex && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && \ yum -q install -y --disableplugin=fastestmirror docker-ce docker-ce-cli containerd.io && \ yum clean all && rm -rf /var/cache/yum # 添加Adoptium Temurin官方源(提供temurin系列JDK包) RUN set -ex && curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /etc/pki/rpm-gpg/RPM-GPG-KEY-Adoptium && \ curl -fsSL https://packages.adoptium.net/artifactory/rpm/centos/7/x86_64/repo.repo | tee /etc/yum.repos.d/adoptium.repo # 安装基础依赖和Temurin JDK,设置超时时间并清理缓存 RUN set -ex && yum -q update -y --disableplugin=fastestmirror --timeout=300 && \ yum -q install -y --disableplugin=fastestmirror --timeout=300 \ bash \ bzip2-devel \ ca-certificates \ curl \ epel-release \ gcc \ gcc-c++ \ git \ gnutls \ gnutls-devel \ libffi-devel \ make \ ncurses-devel \ openssh-clients \ openssh-server \ openssl \ openssl-devel \ rsync \ readline-devel \ tar \ unzip \ wget \ zip \ zlib-devel \ temurin-11-jdk && \ yum clean all && rm -rf /var/cache/yum
关键调整点
- 补充Temurin源:CentOS 7官方源不含temurin系列JDK,必须先添加Adoptium的官方rpm源才能找到该包
- 禁用fastestmirror插件:该插件在自动选择最快源时容易卡住,直接禁用可避免此类问题
- 设置yum超时:添加
--timeout=300(5分钟),避免因网络波动导致无限等待 - 清理yum缓存:每步yum操作后清理缓存,减少镜像体积同时避免缓存引发的异常
- 简化DNS配置:原配置中的mdns相关项可能导致解析延迟,改为最简的
files dns更稳定
内容的提问来源于stack exchange,提问作者Stark
相关产品推荐
相关产品推荐

