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

