Docker容器占用空间远超显示值,如何排查及清理冗余空间?
GitLab容器磁盘占用异常排查与清理方案
一、定位容器目录的隐藏占用
- 进入目标容器的Docker目录:
cd /var/lib/docker/containers/a658* - 检查容器日志文件:GitLab容器的JSON日志(
*-json.log)如果没配置轮转,会持续膨胀,执行du -h *-json.log查看大小,这是最常见的大空间占用源。 - 排查容器可写层与匿名卷:
- 执行
docker inspect a658,找到GraphDriver.Data.MergedDir对应的路径,进入后用du -h . --max-depth=1查看可写层的空间占用; - 查看
Mounts字段里的匿名卷(未绑定主机目录的条目),用docker volume ls找到对应卷名,再通过docker inspect <卷名>获取路径,检查卷的大小。
- 执行
二、检查Docker全局空间占用
- 查看Docker资源占用明细:
docker system df,能直观看到镜像、容器、卷、构建缓存各自的空间占比,快速定位冗余项。 - 清理Docker冗余资源:执行
docker system prune -a,会清理所有未被使用的镜像、容器、卷、网络,执行前确认不会误删业务依赖的资源。
三、GitLab容器内部深层排查
- 检查容器内日志目录:即使根目录总大小不大,
/var/log/gitlab可能未挂载到主机,占用容器可写层空间,进入容器执行du -h /var/log/gitlab --max-depth=1确认。 - 清理临时文件:执行
du -h /tmp --max-depth=1,排查是否有未清理的大临时文件。
四、主机系统层面排查
- 用交互式工具定位大目录:安装
ncdu(yum install ncdu -y)后执行ncdu /var/lib/docker,能直观遍历目录,快速找到占用空间最大的文件/目录。 - 检查系统日志:执行
du -h /var/log/* | sort -h,排查主机系统日志是否异常膨胀。
针对性清理操作
- 截断过大的容器日志:如果是JSON日志占用空间,直接执行
truncate -s 0 /var/lib/docker/containers/a658*/a658*-json.log;同时配置Docker日志轮转,编辑/etc/docker/daemon.json添加:
{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } }
重启Docker生效:systemctl restart docker(注意会停止所有容器,提前做好业务准备)。
- 配置GitLab日志轮转:在挂载的
/srv/gitlab/config/gitlab.rb中添加:
logging['logrotate_frequency'] = "daily" logging['logrotate_maxsize'] = "100M" logging['logrotate_rotate'] = 7
进入容器执行gitlab-ctl reconfigure使配置生效。
- 清理无用Docker卷:执行
docker volume prune,确认无需要保留的匿名卷后再执行。
内容的提问来源于stack exchange,提问作者entity_distributed
相关产品推荐
相关产品推荐

