You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker逐渐占满/var目录,GitLab服务器构建因空间不足失败求助

Docker GitLab 服务器 overlay2 存储空间占用排查与解决

排查方向

  • 定位overlay2内的具体占用源:执行du -h --max-depth=2 /var/lib/docker/overlay2,找到占用最大的子目录后逐层深入查看,大概率是未清理的容器日志、构建临时文件或悬空镜像层。
  • 检查遗留容器:执行docker ps -a,查看是否存在大量已停止但未删除的容器,这类容器的overlay层会持续占用空间。
  • 排查悬空镜像层:执行docker images -f "dangling=true",部分未关联到任何镜像的悬空层可能未被docker system prune识别。
  • 检查GitLab Runner缓存:如果使用GitLab Runner执行构建,构建产生的缓存(如依赖包、构建产物)可能存于容器的overlay层中,若未配置自动清理会持续累积。
  • 核实Docker日志配置:默认json-file驱动的容器日志无大小限制,会无限增长并占用overlay2空间,可通过docker inspect <容器ID> | grep LogPath定位日志文件查看大小。

解决方法

  • 清理遗留容器与悬空资源:
    1. 删除所有已停止的容器:docker rm $(docker ps -aq -f status=exited)
    2. 删除悬空镜像:docker rmi $(docker images -f "dangling=true" -q)
    3. 强制清理所有未使用的Docker资源:docker system prune -af(-a清理所有未被容器使用的镜像,-f跳过确认)
  • 清理GitLab Runner构建缓存:
    • 手动进入Runner的缓存存储目录(若用Docker executor,缓存可能在宿主机的/var/lib/docker/volumes或容器内部)删除旧缓存;
    • 在GitLab项目设置中配置缓存过期策略,限制缓存保留天数。
  • 限制容器日志大小:
    编辑/etc/docker/daemon.json添加日志限制配置:
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m",
        "max-file": "3"
      }
    }
    
    重启Docker服务生效:systemctl restart docker
  • 清理容器内临时文件:若某容器的overlay层占用过大,进入容器(docker exec -it <容器ID> bash)检查是否有未清理的构建产物、依赖包(如node_modules、maven仓库),手动清理或调整构建脚本在完成后自动清理临时文件。
  • 验证GitLab持久化配置:确认GitLab容器的核心数据目录(如数据存储、日志、配置)均已挂载到宿主机其他磁盘,避免数据写入overlay2层。

内容的提问来源于stack exchange,提问作者NickHayMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:05:22