跳到主要内容

Docker数据卷数据的复制和迁移


方法 1:使用 docker cp 命令

docker cp 命令可以直接从容器中复制文件到主机。

步骤:

  1. 找到挂载了数据卷的容器名称或 ID:

    docker ps
  2. 使用 docker cp 命令将数据从容器中复制到主机:

    docker cp <container_name>:<container_path> <host_path>

示例:

假设数据卷挂载在容器的 /var/lib/mysql 目录,想将其拷贝到主机的 /backup 目录:

docker cp my_database:/var/lib/mysql /backup

方法 2:直接挂载数据卷到另一个容器并拷贝

可以启动一个临时容器,挂载需要的卷,然后从该容器中拷贝数据。

步骤:

  1. 启动一个临时容器,挂载目标数据卷:
    docker run --rm -v <volume_name>:<mount_path> -v <host_path>:<backup_path> busybox \
    cp -r <mount_path>/* <backup_path>

示例:

假设数据卷名为 my_volume,挂载到 /data,并将数据拷贝到主机的 /backup

docker run --rm -v my_volume:/data -v /backup:/backup busybox \
cp -r /data/* /backup

方法 3:直接从数据卷目录中复制(Linux 主机)

在 Linux 上,Docker 数据卷通常存储在 /var/lib/docker/volumes 目录下。可以直接找到对应的卷目录并复制数据。

步骤:

  1. 找到数据卷的路径:

    docker volume inspect <volume_name>

    输出示例:

    [
    {
    "Name": "my_volume",
    "Driver": "local",
    "Mountpoint": "/var/lib/docker/volumes/my_volume/_data",
    "Scope": "local"
    }
    ]

    数据实际存储在 Mountpoint 指定的路径(如 /var/lib/docker/volumes/my_volume/_data)。

  2. 直接复制数据到主机:

    cp -r /var/lib/docker/volumes/my_volume/_data /backup

方法 4:使用 tar 打包并导出

可以通过 tar 将数据打包后再拷贝出来。

步骤:

  1. 在运行的容器中打包数据:

    docker exec <container_name> tar -cvf /backup.tar <container_path>

    示例:

    docker exec my_database tar -cvf /backup.tar /var/lib/mysql
  2. 将打包文件拷贝到主机:

    docker cp <container_name>:/backup.tar <host_path>

    示例:

    docker cp my_database:/backup.tar /backup/backup.tar
  3. 解压文件:

    tar -xvf /backup/backup.tar -C <destination_path>

方法 5:备份整个数据卷

可以使用 docker run 命令将数据卷备份到一个 tar 文件中。

备份数据卷:

docker run --rm -v <volume_name>:/data -v $(pwd):/backup busybox \
tar -czf /backup/volume_backup.tar.gz /data

示例:

将名为 my_volume 的数据卷备份到当前目录:

docker run --rm -v my_volume:/data -v $(pwd):/backup busybox \
tar -czf /backup/my_volume_backup.tar.gz /data

解压备份:

tar -xvzf my_volume_backup.tar.gz -C /destination_path

总结

  • docker cp:适合直接从容器中复制文件。
  • 挂载数据卷到临时容器:适合直接操作卷中的数据。
  • 直接访问主机上的卷目录:适合在 Linux 主机上操作。
  • 使用 tar 打包:适合需要备份和迁移的场景。