磁盘满后,重新挂载磁盘,docker 迁移

1、迁移目标

将 Docker 的默认存储目录(通常是 /var/lib/docker)从旧磁盘迁移到新挂载的磁盘(例如您刚挂载的 /data 目录)。

2、前提条件

新磁盘(如 /dev/sdb1)已经格式化并挂载到了某个目录,例如 /data。

确认 Docker 当前的使用状态和存储路径。

详细步骤

第一步:确认当前 Docker 状态和存储目录

查看 Docker 当前使用的存储目录:

sudo docker info | grep "Docker Root Dir"

输出通常是:Docker Root Dir: /var/lib/docker

停止 Docker 服务:
这是最关键的一步,必须确保 Docker 完全停止,否则数据会损坏。

sudo systemctl stop docker

同时停止 containerd(如果有)

sudo systemctl stop containerd

验证是否停止:

sudo systemctl status docker

第二步:同步数据到新位置

我们使用 rsync 来同步数据,因为它能保留所有文件权限和属性,这对于 Docker 至关重要。

使用 rsync 复制数据(假设新挂载点是 /data):

sudo rsync -avxP /var/lib/docker/ /data/docker/

-a:归档模式,保留所有属性(权限、所有权、时间戳等)

-v: verbose,显示详细过程

-x:保持文件系统边界,不跨越不同文件系统

-P:显示进度,并支持断点续传

这个过程可能需要一段时间,取决于 /var/lib/docker 的大小。

第三步:备份并修改 Docker 配置

我们需要告诉 Docker 使用新的存储位置。

备份原有的 Docker 目录(重命名而不是删除,以防万一):

sudo mv /var/lib/docker /var/lib/docker.bak

创建软链接(Symbolic Link)【推荐方法】:

创建一个指向新位置的软链接:

sudo ln -s /data/docker /var/lib/docker

验证软链接:

ls -l /var/lib | grep docker

应该看到类似 docker -> /data/docker 的输出。

或者:修改 daemon.json 配置文件【可选方法】:

编辑 Docker 的配置文件:

sudo nano /etc/docker/daemon.json

如果文件不存在,就创建一个。添加以下内容(指定新的数据路径):

json
{
  "data-root": "/data/docker"
}

保存并退出。

说明:两种方法任选其一即可。创建软链接更简单直观,与系统耦合度低;修改配置文件是 Docker 官方支持的方式。我个人更常用软链接方法。

第四步:重启 Docker 并验证

启动 Docker 服务:

sudo systemctl start docker
sudo systemctl start containerd

验证 Docker 服务状态和新存储路径:

sudo systemctl status docker # 确保状态是 active (running)
sudo docker info | grep "Docker Root Dir" # 确认新的路径是否正确

如果使用软链接,这里显示的还是 /var/lib/docker,但它实际指向了 /data/docker。
如果使用修改 daemon.json 的方法,这里会直接显示 Docker Root Dir: /data/docker。

验证容器和镜像是否完好:

sudo docker images # 查看所有镜像是否都在
sudo docker ps -a # 查看所有容器(包括已停止的)是否都在

尝试启动一个之前的容器进行测试:

sudo docker start <container_name_or_id>
sudo docker ps # 查看是否运行成功

第五步:清理旧数据(确认无误后)

非常重要: 只有在确认 Docker 在新位置运行完全正常,所有容器、镜像、数据卷都正确无误后,才能执行这一步。

删除之前备份的旧数据

sudo rm -rf /var/lib/docker.bak

总结:操作流程一览表
步骤 命令 说明

  1. 确认状态 docker info | grep "Docker Root Dir" 查看当前存储路径
  2. 停止服务 systemctl stop docker containerd 必须停止,防止数据损坏
  3. 同步数据 rsync -avxP /var/lib/docker/ /data/docker/ 保留权限复制数据
  4. 备份旧目录 mv /var/lib/docker /var/lib/docker.bak 安全起见,先重命名
  5. 创建软链 ln -s /data/docker /var/lib/docker 让系统认为新目录就是老地方
  6. 重启验证 systemctl start docker 启动服务
    docker images docker ps -a 检查所有数据是否完好
  7. 清理 rm -rf /var/lib/docker.bak 最终确认无误后再删除
    按照这个流程,您可以安全无损地将 Docker 的整个运行环境迁移到新的磁盘上,所有服务、容器、镜像、网络和卷配置都会得到保留。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容