Docker数据卷数据的复制和迁移
方法 1:使用 docker cp 命令
docker cp 命令可以直接从容器中复制文件到主机。
步骤:
-
找到挂载了数据卷的容器名称或 ID:
docker ps -
使用
docker cp命令将数据从容器中复制到主机:docker cp <container_name>:<container_path> <host_path>
示例:
假设数据卷挂载在容器的 /var/lib/mysql 目录,想将其拷贝到主机的 /backup 目录:
docker cp my_database:/var/lib/mysql /backup
方法 2:直接挂载数据卷到另一个容器并拷贝
可以启动一个临时容器,挂载需要的卷,然后从该容器中拷贝数据。
步骤:
- 启动一个临时容器,挂载目标数据卷:
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 目录下。可以直接找到对应的卷目录并复制数据。
步骤:
-
找到数据卷的路径:
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)。 -
直接复制数据到主机:
cp -r /var/lib/docker/volumes/my_volume/_data /backup
方法 4:使用 tar 打包并导出
可以通过 tar 将数据打包后再拷贝出来。
步骤:
-
在运行的容器中打包数据:
docker exec <container_name> tar -cvf /backup.tar <container_path>示例:
docker exec my_database tar -cvf /backup.tar /var/lib/mysql -
将打 包文件拷贝到主机:
docker cp <container_name>:/backup.tar <host_path>示例:
docker cp my_database:/backup.tar /backup/backup.tar -
解压文件:
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打包:适合需要备份和迁移的场景。