Docker 加载镜像时报 no space left on device 的彻底解决方案

目录

在一次部署 FastDDS 镜像的过程中,我们执行如下命令:

bash 复制代码
sh start_fastdds_pub.sh

脚本内部会先删除旧镜像、再通过 docker load -i fastdds_2.8.0.tar 重新加载镜像。

结果报错:

复制代码
write /blobs/sha256/635e6bb12b404837cd39744c12bf83886fb46a0ef9550b7f945fa991d9d4c802: no space left on device

即 "磁盘空间不足"。本文记录从排查到彻底解决的完整过程。


一、现象与初步判断

运行 df -h 后发现:

复制代码
/dev/sda3        46G   45G  818M  99% /
/dev/sda5        30G  359M   30G   2% /data

根分区(/)几乎被占满,而 Docker 的默认数据目录 /var/lib/docker 正好在这个分区上。

这意味着 Docker 镜像、容器的写层都挤在 / 里,导致空间爆满。


二、彻底释放空间的思路

既然 /data 分区还有 30G 空闲,我们可以把 Docker 的数据根目录迁过去,这样以后所有镜像、容器都不再占用 /


三、操作步骤(生产可用)

1、停止 Docker

bash 复制代码
systemctl stop docker

2、创建新目录

bash 复制代码
mkdir -p /data/docker

3、同步旧数据

bash 复制代码
rsync -aH --delete /var/lib/docker/ /data/docker/ \
  2>/dev/null || cp -a /var/lib/docker/. /data/docker/

4、备份旧目录

bash 复制代码
mv /var/lib/docker /var/lib/docker.bak

5、修改 Docker 配置

新建或修改 /etc/docker/daemon.json

bash 复制代码
{
  "data-root": "/data/docker"
}

6、启动 Docker

bash 复制代码
systemctl start docker

7、验证是否生效

bash 复制代码
docker info | grep "Docker Root Dir"

8、删除旧备份(释放空间)

bash 复制代码
rm -rf /var/lib/docker.bak

四、重新导入镜像

bash 复制代码
docker load -i /opt/data/fast_demo/fastdds_2.8.0.tar

若显示:

复制代码
Loaded image: fastdds:2.8.0

说明镜像成功导入。


五、经验总结

项目 原因 解决方式
报错内容 /var/lib/docker 空间耗尽 查看根分区与 overlay 挂载情况
docker system prune 无效 overlay 层未被清理 手动清理或迁移 Docker 根目录
推荐做法 将 Docker 数据迁到大分区 /data 修改 daemon.jsondata-root
验证方式 docker info + df -h 观察 /data 增长、/ 降低

六、附加命令:快速清理大文件

bash 复制代码
# 找出最大目录
du -xh /var/lib/docker | sort -h | tail -n 20

# 截断容器日志
find /var/lib/docker/containers -name "*-json.log" -exec truncate -s 0 {} \;

# 清理系统日志
journalctl --vacuum-size=500M
相关推荐
礼拜天没时间.4 小时前
深入Docker架构——C/S模式解析
linux·docker·容器·架构·centos
猫头虎5 小时前
如何使用Docker部署OpenClaw汉化中文版?
运维·人工智能·docker·容器·langchain·开源·aigc
会周易的程序员5 小时前
openplc runtimev4 Docker 部署
运维·c++·物联网·docker·容器·软件工程·iot
小Pawn爷5 小时前
1.Docker基础
运维·docker·容器
chinesegf5 小时前
清理docker残留镜像images
运维·docker·容器
小Pawn爷6 小时前
2.Docker的存储
运维·docker·容器
广州中轴线6 小时前
OpenStack on Kubernetes 生产部署实战(十七)
容器·kubernetes·openstack
礼拜天没时间.7 小时前
自定义镜像制作——从Dockerfile到镜像
linux·docker·容器·centos·bash
岁岁种桃花儿7 小时前
注册中心宕机后,RPC调用还能成功吗?主流框架实测级分析
zookeeper·eureka·rpc
luffy54597 小时前
windows下通过docker-desktop创建redis实例
windows·redis·docker·容器