Docker 存储目录不够了,如何迁移到新的磁盘

200 阅读2分钟

目录

  1. Docker 存储目录介绍
  2. 存储目录结构详解
  3. 迁移方法
  4. 注意事项与故障排查

1. Docker 存储目录介绍

在 Ubuntu 系统中,Docker 默认将其所有数据(包括镜像、容器等)存储在 /var/lib/docker 目录下。随着使用时间的增长,这个目录可能会占用大量空间。特别是其中的 overlay2 目录,它存储了所有的容器层和镜像层数据。

2. 存储目录结构详解

Docker 的 overlay2 存储驱动使用联合文件系统来管理镜像层和容器层。以下是主要目录结构:

/var/lib/docker/overlay2/
├── [容器层ID]              
│   ├── diff/              # 容器的实际文件内容
│   ├── merged/           # 联合挂载点
│   ├── work/             # OverlayFS 工作目录
│   └── link              # 短 ID 链接
├── [镜像层ID]             
│   ├── diff/             # 镜像层内容
│   └── link              # 短 ID 链接
└── l/                    # 短 ID 符号链接存储

3. 使用 daemon.json 配置文件迁移

  1. 创建或编辑 Docker 守护进程配置文件:
sudo nano /etc/docker/daemon.json
  1. 添加或修改以下内容:
{
  "data-root": "/path/to/your/docker/data"
}
  1. 执行迁移步骤:
# 停止 docker 服务
sudo systemctl stop docker

# 复制现有数据到新位置
sudo rsync -aP /var/lib/docker/ /path/to/your/docker/data/

# 备份原目录
sudo mv /var/lib/docker /var/lib/docker.old

# 启动 docker 服务
sudo systemctl start docker

# 验证更改
docker info | grep "Docker Root Dir"

# 确认无误后删除备份
sudo rm -rf /var/lib/docker.old
  1. 按照上述方法 3.1 中的步骤 3 执行迁移操作。

4. 注意事项与故障排查

4.1 迁移前检查清单

  • 确保新目录有足够的存储空间
  • 验证新存储位置的文件系统支持 overlay2
  • 检查新目录的权限设置
  • 备份重要的容器数据
  • 选择合适的迁移时间,避免影响业务

4.2 常见问题排查

  1. 检查 Docker 服务状态:
sudo systemctl status docker
  1. 查看详细日志:
sudo journalctl -u docker
  1. 检查目录权限:
ls -la /path/to/your/docker/data

4.3 存储空间管理

定期运行以下命令清理 Docker 存储空间:

# 查看 Docker 磁盘使用情况
docker system df

# 清理未使用的对象(镜像、容器、网络)
docker system prune

# 同时清理未使用的数据卷
docker system prune --volumes

# 仅清理未使用的镜像
docker image prune

结语

Docker 存储目录的迁移是一项需要谨慎对待的操作。通过合理的规划和正确的操作步骤,我们可以安全地将 Docker 的数据迁移到更适合的位置。记住,在执行迁移操作之前,一定要做好充分的准备和备份工作。