🚀 Docker 数据目录迁移指南:告别 `/var/lib/docker` 带来的的问题
🚀 Docker 数据目录迁移指南:告别 /var/lib/docker
的困扰
Docker 默认将所有镜像、容器、卷等数据存储在 /var/lib/docker
目录下。随着业务增长,这个目录可能迅速占满根分区,导致系统不稳定。本文将介绍如何正确地将 Docker 的数据目录迁移到其他磁盘或路径。
🧭 一、为什么不能用软链接(ln -s
)迁移?
虽然 ln -s
是很多人的第一选择,但它并不适合迁移 Docker 数据目录,原因如下:
❌ Docker 的子模块(如 containerd、overlay2 驱动)对路径敏感,可能无法识别软链接。
❌ CNI 网络、socket、挂载点等依赖真实路径。
❌ 软链接可能导致容器无法互联、网络失效、启动失败等问题。
✅ 正确姿势:配置 Docker 使用新的数据目录,而不是绕过它。
📦 二、准备工作
假设你希望将 Docker 数据目录迁移到 /mnt/docker-data
:
NEW_DOCKER_DIR="/mnt/docker-data"
确保目标磁盘已挂载并具备足够空间:
df -h
🛠️ 三、迁移步骤(官方推荐方式)
步骤 1:停止 Docker 服务
sudo systemctl stop docker
步骤 2:复制原数据到新位置
使用 rsync
保留权限和符号链接:
sudo rsync -aP /var/lib/docker/ "$NEW_DOCKER_DIR"
注意:不要省略尾部的
/
,否则目录层级会错误。
步骤 3:配置 Docker 使用新目录
编辑或创建 Docker 的配置文件:
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
添加如下配置:
{
"data-root": "/mnt/docker-data"
}
步骤 4:启动 Docker 服务
sudo systemctl daemon-reexec
sudo systemctl start docker
✅ 四、验证迁移是否成功
运行以下命令检查:
docker info | grep "Docker Root Dir"
输出应类似:
Docker Root Dir: /mnt/docker-data
尝试启动原有容器、运行 docker-compose
,应能正常工作。
🧹 五、清理旧目录(可选)
迁移验证无误后,可删除旧数据目录以释放空间:
sudo rm -rf /var/lib/docker
⚠️ 一定要确保一切正常运行后再执行此操作!
💡 六、常见问题与建议
问题 | 说明 |
---|---|
docker-compose 启动失败 |
检查网络配置是否正确恢复,使用 docker network ls 和 docker-compose logs 排查 |
容器无法互通 | 可能是软链接引起,建议使用正式配置而非 ln -s |
Docker 启动报错 | 查看日志 journalctl -u docker -xe 获取详细错误信息 |
📘 七、小结
✅ 使用
daemon.json
中的data-root
正确迁移数据目录。❌ 不推荐
ln -s
软链接方式,易引发网络与挂载问题。✅ 迁移后验证并清理旧目录,确保系统健康运行。
写在最后:如果你也踩过 “ln -s
坑”,欢迎留言交流,也可以收藏这篇文章,作为以后运维的备忘录!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: