🚀 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 lsdocker-compose logs 排查
容器无法互通 可能是软链接引起,建议使用正式配置而非 ln -s
Docker 启动报错 查看日志 journalctl -u docker -xe 获取详细错误信息

📘 七、小结

  • ✅ 使用 daemon.json 中的 data-root 正确迁移数据目录。

  • ❌ 不推荐 ln -s 软链接方式,易引发网络与挂载问题。

  • ✅ 迁移后验证并清理旧目录,确保系统健康运行。


写在最后:如果你也踩过 “ln -s 坑”,欢迎留言交流,也可以收藏这篇文章,作为以后运维的备忘录!

本作品采用《CC 协议》,转载必须注明作者和本文链接
九九一十八,一步一个脚印
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!