Docker-Overlay2磁盘空间清理方法之一清理数据卷volumes


今天突然发现跑服务器的磁盘满了。

记录下进入服务查看到Docker-Overlay2磁盘空间的清理方法:清理Docker的数据卷volumes
Docker在长时间使用的情况下,经常需要删除旧的容器并创建新的容器,时间长了Docker 的数据卷 volumes 会产生了很多的僵尸文件,这些文件大都是未绑定容器的目录。

1.查看磁盘使用

df -h

发现是目录 /data/docker/overlay2 下占满了磁盘,看看里面是什么。

2.查看Docker数据卷及磁盘使用情况

查询Docker的磁盘使用情况:

docker system df
'''
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              2                   1                   20.48GB             9.64GB (47%)
Containers          1                   1                   10.46GB             0B (0%)
Local Volumes       20                  0                   135.35GB            135.35GB (100%)
Build Cache         0                   0                   0B                  0B
'''

上述信息可以看出:
Docker 镜像占用了 20.48GB 磁盘,
Docker 容器占用了 10.46GB 磁盘,
Docker 数据卷占用了 135.35GB 磁盘。

查询僵尸文件:
官方提供用于 查询僵尸文件的命令:

docker volume ls -qf dangling=true

在这里插入图片描述

3.Docker 删除无用数据卷

手动删除命令

# 删除所有dangling数据卷(即无用的Volume,僵尸文件)
docker volume rm $(docker volume ls -qf dangling=true)

# 删除所有dangling镜像(即无tag的镜像)
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

# 删除所有关闭的容器
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
注意,所有关闭的容器都会被删除,请核查是否存在关闭运行但是需要保留的容器

# 删除关闭的容器、无用的数据卷和网络
docker system prune
# 删除更彻底,可以将没有容器使用Docker镜像都删掉
docker system prune -a

重启Docker
使用上面几个方法的命令可以有效清理 Docker 运行所产生的无用文件,且无需重启 Docker 即可生效

如果遇到Docker 无法清理一些无用目录,重启 Docker 可以解决这个问题

<think>好的,用户在使用Docker Compose部署项目时遇到了磁盘空间不足的问题,需要清理镜像、容器和卷来释放250G的空间。我需要根据提供的引用资料和Docker相关知识来制定解决方案。 首先,用户提到要清理镜像、容器和卷。根据引用[1],可以使用docker volume rm和docker volume prune来删除数据卷。同时,清理镜像和容器通常涉及停止并删除容器,然后删除不再使用的镜像。此外,docker system prune可以清理整个系统中的无用数据,包括镜像、容器和卷。 接下来,我需要检查用户提供的引用资料是否有其他有用的信息。引用[3]提到移动docker-compose文件并赋予权限,这可能和问题无关。引用[4]提到使用docker load导入镜像,但用户的问题是关于清理空间,所以可能这部分暂时用不上。 然后,考虑用户可能需要分步骤指导,包括停止并删除容器、删除不用的镜像、清理数据卷以及使用docker system prune。此外,可能需要检查磁盘使用情况,找出占用空间大的目录,比如/var/lib/docker,并建议迁移数据或调整存储驱动。 需要注意确保命令的正确性,例如在删除容器前必须先停止它们,使用docker ps -a查看所有容器docker rm删除容器docker rmi删除镜像,以及docker volume prune确认后再删除未使用的卷。同时,提醒用户谨慎操作,避免误删重要数据。 最后,生成相关问题,可能涉及其他清理方法、监控磁盘使用、调整存储驱动等,确保用户后续能有效管理磁盘空间。</think>### 分步解决方案:清理Docker占用磁盘空间 1. **停止并删除所有无用容器** ```bash # 停止所有运行中的容器 docker stop $(docker ps -q) # 删除所有已停止的容器 docker rm $(docker ps -aq) ``` - *说明*:容器停止后会释放占用的运行时资源,但持久化数据仍保留在卷中[^1] 2. **清理未使用的镜像** ```bash # 列出所有镜像并按大小排序 docker images --format "{{.ID}}\t{{.Size}}\t{{.Repository}}" | sort -k 2 -h # 删除指定镜像 docker rmi <镜像ID> # 强制清理悬空镜像(未被任何容器引用的中间层镜像) docker image prune -f ``` 3. **清理数据卷** ```bash # 查看卷占用空间 docker system df -v # 删除未使用的卷(谨慎操作,会清除所有未关联容器的数据) docker volume prune ``` 4. **系统级清理** ```bash # 综合清理镜像/容器/网络/构建缓存等(包含交互确认) docker system prune --all --volumes ``` 5. **针对性检查大文件** - 查看Docker存储目录占用: ```bash du -sh /var/lib/docker/* ``` - 若发现`overlay2`目录过大,可能是容器层数据堆积,需结合具体容器分析 --- ### 关键操作说明 | 命令 | 作用 | 风险等级 | |------|------|----------| | `docker volume prune` | 清理未使用的数据卷 | ⚠️ 可能丢失未备份数据 | | `docker system prune` | 清理整个Docker系统 | ⚠️ 会删除所有未被使用的对象 | | `docker rmi $(docker images -q)` | 删除所有镜像 | 🔥 高危操作 | --- ### 附加建议 1. **调整Docker存储驱动** 若使用`devicemapper`存储驱动,建议更换为`overlay2`以减少空间占用[^4] 2. **配置日志轮转** 在`/etc/docker/daemon.json`中添加: ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 3. **迁移数据目录** 对于250G的大容量需求,建议将Docker根目录迁移到独立分区: ```bash systemctl stop docker rsync -av /var/lib/docker /new_path/ echo '{"data-root": "/new_path/docker"}' > /etc/docker/daemon.json systemctl start docker ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值