1. 问题背景与诊断思路
最近在Ubuntu系统上运行Docker容器时,突然收到"no space left on device"的报错。这种情况在使用Docker进行开发时并不少见,特别是当系统分区空间有限,又频繁创建和删除容器时。通过df -h命令查看磁盘使用情况,发现/var/lib/docker目录所在分区已经使用了98%的空间。
提示:Docker默认将所有镜像、容器、卷和网络配置存储在
/var/lib/docker目录下,这个位置在Ubuntu安装时通常会被分配有限的磁盘空间。
进一步分析发现,系统中存在一个名为ragflow的容器及其相关镜像占用了大量空间。这个容器可能是之前某个项目的测试环境,现在已经不再需要。在Docker生态中,这种"临时容器堆积"现象很常见,特别是当开发者快速迭代不同版本时,容易遗忘清理旧容器。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Docker存储机制深度解析
2.1 Docker存储驱动与磁盘占用
Ubuntu系统上Docker默认使用overlay2存储驱动,这种分层存储机制虽然高效,但也存在一些空间管理的特点:
-
镜像分层存储:每个Docker镜像由多个只读层组成,不同镜像可以共享相同的层。但当删除镜像时,只有独占层会被真正释放。
-
容器可写层:每个运行的容器会在镜像基础上添加一个可写层,所有修改都保存在这个层中。停止容器不会自动删除这个层。
-
卷(Volume)数据:容器挂载的卷数据独立于镜像和容器层,需要单独管理。
bash复制# 查看Docker磁盘使用详情
docker system df
输出示例:
code复制TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 15 3 5.2GB 3.1GB (59%)
Containers 8 1 1.1GB 1.1GB (100%)
Local Volumes 5 2 3.7GB 1.2GB (32%)
Build Cache 0 0
