直接修改 docker 守护进程的 data-root 是规避 volume 占满系统盘最可靠的方式,需停服务后整体迁移 /var/lib/docker(linux)或用户目录下 docker 数据(windows),再通过 daemon.json 配置新路径并验证生效。
直接修改 docker 守护进程的 data-root 是规避 volume 占满系统盘最可靠的方式。默认情况下,docker 的所有数据(含 volumes、镜像、容器层、网络配置等)都存放在 /var/lib/docker(linux)或 c:\users\[用户名]\.docker\(windows),而 volume 默认就建在这个根目录下。不改根路径,只单独处理 volume,容易遗漏或失效。
确认当前存储位置和空间压力
先执行命令,明确问题是否真出在 volume 所在路径:
-
docker info | grep "Docker Root Dir"—— 查看实际根目录位置 -
docker volume ls和docker system df -v—— 看 volume 总量及各 volume 占用情况 -
df -h /var/lib/docker(Linux)或df -h C:(Windows)—— 判断是否已逼近磁盘上限
停服务 + 安全迁移全部数据(含 volume)
volume 是 Docker 数据根目录下的子目录(/var/lib/docker/volumes/),不能单独移动。必须整体迁移整个 data-root 目录,才能确保 volume、镜像、容器状态一致不损坏:
- Linux:停服务:
sudo systemctl stop docker.socket && sudo systemctl stop docker - 创建目标目录(如
/data/docker),确保是root:root权限且文件系统支持 d_type(推荐 ext4/xfs) - 用
rsync迁移(不是cp):sudo rsync -avz --delete /var/lib/docker/ /data/docker/ - Windows:退出 Docker Desktop 全进程,手动创建新路径(如
D:\docker-data),再配置
配置 daemon.json 指向新根路径
这是关键一步,仅靠软链接或改 service 启动参数不可靠,新版 Docker 已弃用部分旧方式:
- Linux 编辑
/etc/docker/daemon.json,写入:{"data-root":"/data/docker"}(末尾不加斜杠) - Windows 编辑
C:\Users\[用户名]\.docker\daemon.json,内容同上,路径用双反斜杠或正斜杠均可,如:{"data-root":"D:/docker-data"} - 保存后重载配置:
sudo systemctl daemon-reload(Linux)或重启 Docker Desktop(Windows)
验证并清理旧路径(可选)
启动后务必验证,避免配置未生效:
- 运行
docker info | grep "Docker Root Dir",输出必须是你指定的新路径 - 新建一个 volume:
docker volume create testvol,然后检查该 volume 是否出现在新路径下的volumes/子目录中 - 确认无误后,可手动删除原
/var/lib/docker(Linux)或清空旧用户目录中的 Docker 文件夹(Windows)










