把 Docker 的运行数据目录从系统盘(/)迁移到 /home
你的目的本质上是:把 Docker 的运行数据目录从系统盘(/)迁移到 /home 所在的大容量磁盘(/dev/sdb1),以避免后续容器、日志、overlay2 占满根分区。
需要先明确一个关键点,然后给出正确、规范、可回滚的迁移方案。
一、先澄清一个常见误区(很重要)
你现在关注的是:
/var/lib/docker/containers
但 Docker 实际占用空间的核心并不在 containers 目录,而是在:
-
/var/lib/docker/overlay2← 真正吃空间 -
/var/lib/docker/volumes -
/var/lib/docker/image
你当前看到:
containers 目录 < 1MB
overlay2 挂载在 /var/lib/docker/overlay2/*
说明:
-
现在只是“刚开始”,但 只迁移 containers 没有任何实质意义
-
正确做法是:整体迁移 /var/lib/docker
二、推荐方案(生产最常用):修改 Docker data-root
这是最干净、最安全、官方推荐的方式。
1️⃣ 停止 Docker 服务
systemctl stop docker
systemctl stop containerd
确认没有残留进程:
ps -ef | grep -E 'docker|containerd' | grep -v grep
2️⃣ 在 /home/shuncom 下准备新目录
mkdir -p /home/shuncom/docker
权限建议保持 root:
chown -R root:root /home/shuncom/docker
3️⃣ 使用 rsync 迁移原有数据(强烈推荐)
不要用 cp -a,overlay2 + hardlink 场景下 rsync 更安全
rsync -aHAX --numeric-ids /var/lib/docker/ /home/shuncom/docker/
参数说明(你是老运维,这里直说重点):
-
-H:保持 hard links(overlay2 必须) -
-A -X:ACL / xattr -
--numeric-ids:避免 UID/GID 映射问题
4️⃣ 备份原目录(不要直接删)
mv /var/lib/docker /var/lib/docker.bak
5️⃣ 配置 Docker 使用新目录
编辑(没有就新建):
vim /etc/docker/daemon.json
内容如下:
{
"data-root": "/home/shuncom/docker"
}
注意:JSON 严格格式,不能多逗号
6️⃣ 启动 Docker
systemctl daemon-reexec
systemctl start docker
检查状态:
systemctl status docker
7️⃣ 验证是否生效(非常关键)
docker info | grep -i "Docker Root Dir"
应显示:
Docker Root Dir: /home/shuncom/docker
再确认 overlay2:
mount | grep overlay | head
路径应指向 /home/shuncom/docker/overlay2
8️⃣ 一切正常后,清理旧数据
建议观察 1–2 天后再删
rm -rf /var/lib/docker.bak
三、备选方案(不推荐但可用):bind mount
如果你不想改 Docker 配置文件,也可以用挂载方式:
mount --bind /home/shuncom/docker /var/lib/docker
并写入 /etc/fstab:
/home/shuncom/docker /var/lib/docker none bind 0 0
⚠️ 缺点:
-
可维护性差
-
后期排障容易踩坑
-
不利于 Docker 升级
不建议长期使用
四、针对你当前环境的补充建议(基于你贴的 df)
-
/只有 98G,但 overlay2 已经在用 -
/home有 300G,非常适合 Docker data-root -
后续建议:
docker system df docker system prune -a定期清理无用镜像、层
五、总结一句话方案
不要只迁移
/var/lib/docker/containers,而是整体迁移/var/lib/docker,并通过data-root正式切换到/home/shuncom/docker。
如果你愿意,下一步我可以帮你:
-
校验 rsync 后的 overlay2 完整性
-
规划 volumes 单独挂载
-
评估是否需要开启
log-driver限制容器日志膨胀
No Comments