
在生产或开发环境中,随着容器数量和数据量增长,Docker 默认的数据目录(/var/lib/docker)可能会占满系统盘。为了解决存储压力,可以将 Docker 的数据目录迁移到新的位置(例如 /data/docker)。
🎯 目标
- 将 Docker 默认数据目录
/var/lib/docker迁移到新路径(如/data/docker) - 停机一次性迁移,保证容器与镜像数据完整
⚙️ 操作步骤
1️⃣ 创建新目录
sudo mkdir -p /data/docker
sudo chown root:root /data/docker
/data/docker 这个目录是迁移的目标目录
2️⃣ 停止 Docker 服务
sudo systemctl stop docker docker.socket containerd
确认状态:
systemctl status docker
状态应为:
inactive (dead)

3️⃣ 同步数据到新目录
使用 rsync 保留所有文件属性:
sudo rsync -aHAX --delete --info=progress2 /var/lib/docker/ /data/docker/
参数说明:
-aHAX保留权限、硬链接、ACL、扩展属性--delete确保源与目标目录完全一致--info=progress2显示详细进度
4️⃣ 修改 Docker 配置文件
编辑 /etc/docker/daemon.json(如不存在则新建):
sudo vim /etc/docker/daemon.json
如果不会使用vim文本编辑器那么可以使用宝塔的文件功能找到此文件双击编辑

添加或修改:
{
"data-root": "/data/docker"
}
5️⃣ 启动 Docker 服务
sudo systemctl daemon-reload
sudo systemctl start containerd
sudo systemctl start docker
6️⃣ 验证迁移结果
docker info | grep "Docker Root Dir"
预期输出:
Docker Root Dir: /data/docker
进一步确认容器与镜像:
docker ps -a
docker images
7️⃣ 清理旧目录(确认无误后)
sudo mv /var/lib/docker /data/docker.bak
# 观察几天确认稳定后再删除
sudo rm -rf /data/docker.bak
🧩 附加说明
SELinux 环境 如果系统启用 SELinux,需要调整安全上下文:
sudo semanage fcontext -a -e /var/lib/docker /data/docker
sudo restorecon -R /data/docker
排查启动问题 如果 Docker 无法启动,查看日志:
journalctl -u docker -xe
常见原因是权限或 SELinux 标签配置不当。
✅ 至此,Docker 数据目录已成功迁移到 /data/docker。
