Docker构建突发空间不足及YUM仓库故障排查求助
咱一步一步拆解这个双问题——容器内YUM缓存目录空间耗尽和仓库访问失效,结合你已经试过的切换镜像、清理镜像容器等操作,给你几个针对性的解决方向:
一、优先解决空间不足问题
日志明确显示/var/cache/yum/x86_64/7/base可用空间为0,哪怕只需要100k,咱得先把空间问题搞定:
优化Dockerfile,提前清理YUM缓存
在执行yum install的RUN指令后,立刻追加清理命令,避免缓存占用后续构建阶段的空间:RUN yum install -y 你的依赖包 \ && yum clean all \ && rm -rf /var/cache/yum/*这样每一步构建完成后都会自动清理缓存,不会让垃圾占用容器临时空间。
给YUM缓存目录挂载临时文件系统
如果构建过程中确实需要缓存,可以在docker build时指定临时挂载,给YUM缓存目录分配足够空间:docker build --tmpfs /var/cache/yum:rw,size=256M -t 你的镜像名 .这个命令会把YUM缓存目录挂载到内存临时文件系统里,既不占用磁盘空间,256M的大小也足够应付绝大多数依赖安装场景。
彻底清理宿主机Docker相关资源
除了docker rmi/rm,还可以清理Docker的构建缓存、未使用的卷和网络:# 清理所有未使用的镜像、容器、卷、网络(谨慎执行,会删除无用资源) docker system prune -a # 专门清理构建缓存 docker builder prune -f同时检查宿主机的Docker存储目录空间:
df -h /var/lib/docker如果这个目录所在磁盘确实满了,需要清理宿主机上的其他冗余文件,或者扩展磁盘空间。
二、解决YUM仓库失效问题
既然其他人本地构建正常,说明你的构建环境(网络/DNS)可能有问题,或者仓库源配置不对:
替换为国内稳定的YUM镜像源
在Dockerfile开头先替换CentOS的基础源为阿里云或者华为云的镜像,避免默认源访问失败:# 替换CentOS 7的YUM源为阿里云镜像 RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.aliyun.com/centos|g' \ -i.bak /etc/yum.repos.d/CentOS-Base.repo # 安装epel源(如果需要的话) RUN yum install -y epel-release \ && sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://download.fedoraproject.org/pub/epel|baseurl=https://mirrors.aliyun.com/epel|g' \ -i.bak /etc/yum.repos.d/epel.repo使用宿主机网络进行构建
有时候Docker daemon的DNS配置有问题,导致容器内无法访问外部仓库,可以在构建时指定使用宿主机网络:docker build --network host -t 你的镜像名 .排查仓库访问连通性
在Dockerfile里临时加一个测试指令,看看能不能正常访问仓库地址:RUN curl -v https://mirrors.aliyun.com/centos/7/os/x86_64/repodata/repomd.xml如果这个命令失败,说明是网络连通性问题,需要排查宿主机的防火墙、代理设置;如果成功,那可能是之前的仓库源配置有误。
三、额外排查点
- 检查Docker daemon的配置:如果你的Docker daemon设置了
--storage-opt size参数,限制了容器的最大磁盘空间,需要调整这个值或者移除限制。 - 尝试重新拉取基础镜像:有时候基础镜像本身有问题,执行
docker pull 你的基础镜像名:标签重新拉取最新的基础镜像,再进行构建。
内容的提问来源于stack exchange,提问作者somenickname

