用于迁移 Docker 默认数据目录
/var/lib/docker
到/mnt/disk/docker
,保留所有现有数据且无需修改docker.service
,仅通过daemon.json
配置完成迁移:
Docker 数据目录迁移指南(使用 daemon.json)
由于默认路径
/var/lib/docker
所在磁盘空间不足,可以将 Docker 数据目录迁移到新的挂载磁盘(如/mnt/disk/docker
),保留所有镜像、容器、卷、日志等数据。
1. 停止 Docker 服务
sudo systemctl stop docker
执行以下命令确认无残留进程:
ps aux | grep -E "docker|containerd"
确保没有正在运行的进程如:
dockerd
containerd
docker-containerd-shim
等其他 docker 子进程
2. 创建新目录并迁移数据(保留权限)
sudo mkdir -p /mnt/disk/docker
sudo rsync -avz /var/lib/docker/ /mnt/disk/docker/
3. 修改 Docker 配置文件 /etc/docker/daemon.json
sudo tee /etc/docker/daemon.json <<EOF
{
"data-root": "/mnt/disk/docker",
"hosts": ["unix:///var/run/docker.sock"]
}
EOF
或者
vim /etc/docker/daemon.json
{
"data-root": "/mnt/disk/docker",
"hosts": ["unix:///var/run/docker.sock"]
}
4. 修复权限(可选但建议)
sudo chown -R root:docker /mnt/disk/docker
sudo chmod -R 755 /mnt/disk/docker
5. 重启 Docker 并验证
sudo systemctl start docker
docker info | grep "Docker Root Dir" # 应输出 /mnt/disk/docker
docker ps -a # 检查原有容器是否存在
📂 Docker 默认数据目录结构详解(data-root)
当
data-root
默认为/var/lib/docker
时,包含以下关键子目录:
/var/lib/docker/
├── buildkit/ # 镜像构建缓存
├── containers/ # 容器运行数据(日志、配置等)
├── image/ # 镜像及元数据
├── network/ # 网络配置
├── overlay2/ # 镜像层与容器层(Overlay2 存储驱动)
├── plugins/ # 插件数据
├── runtimes/ # 容器运行时信息
├── swarm/ # Swarm 模式相关数据
├── tmp/ # 临时文件
├── trust/ # 镜像签名信任
├── volumes/ # 卷数据(Volume 和 Bind Mount)
└── ... # 其他运行数据
🧱 详细说明
(1)镜像存储路径
目录:
/var/lib/docker/image/
元数据:
overlay2/imagedb/
: 镜像 ID、标签等
overlay2/layerdb/
: 镜像层信息(DiffID、ChainID)实际内容:
镜像层文件存储于
/var/lib/docker/overlay2/
每层一个目录,如:
overlay2/<layer-id>/diff
(2)容器运行时数据
目录:
/var/lib/docker/containers/<容器ID>/
关键文件:
<容器ID>-json.log
: 容器日志(JSON 格式)
config.v2.json
: 容器配置
hostname
,hosts
,resolv.conf
: 网络相关配置
如需恢复默认配置,只需删除或修改
/etc/docker/daemon.json
并迁移数据回/var/lib/docker
。