当前位置: 首页 > 知识库问答 >
问题:

如何将仅数据卷从一台主机移植到另一台主机?

南宫奇思
2023-03-14

正如Docker有关卷的文档中所述,存在所谓的仅数据容器的概念,它提供了一个可以装入多个其他容器的卷,无论仅数据容器是否实际运行。

基本上,这听起来很棒。但有一件事我不明白。

这些卷(如文档所述,出于可移植性原因,这些卷不会显式映射到主机上的文件夹)由Docker在主机上的某个内部文件夹中创建和管理(/var/Docker/volumes/…)。

假设我使用这样一个卷,然后我需要将它从一台主机迁移到另一台主机——我如何移植该卷?AFAICS它有一个唯一的ID——我能去把这个卷及其相应的数据容器复制到一个新主机上吗?如何找到要复制的文件?或者我还没有发现Docker内置的一些支持?

共有3个答案

隗星驰
2023-03-14

您可以将卷导出到tar并传输到另一台机器。并在第二台机器上导入带有tar的数据。这不依赖于卷的实施细节。

# you can list shared directories of the data container
docker inspect <data container> | grep "/vfs/dir/"

# you can export data container directory to tgz
docker run --cidfile=id.tmp --volumes-from <data container> ubuntu tar -cO <volume path> | gzip -c > volume.tgz

# clean up: remove exited container used for export and temporary file
docker rm `cat id.tmp` && rm -f id.tmp
岳池暝
2023-03-14

扩展Docker docs的官方答案和此处的顶部答案,您可以在中使用以下功能。bashrc。zshrc

# backup files from a docker volume into /tmp/backup.tar.gz
function docker-volume-backup-compressed() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -czvf /backup/backup.tar.gz "${@:2}"
}

# restore files from /tmp/backup.tar.gz into a docker volume
function docker-volume-restore-compressed() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -xzvf /backup/backup.tar.gz "${@:2}"
  echo "Double checking files..."
  docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie ls -lh "${@:2}"
}

# backup files from a docker volume into /tmp/backup.tar
function docker-volume-backup() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" busybox tar -cvf /backup/backup.tar "${@:2}"
}

# restore files from /tmp/backup.tar into a docker volume
function docker-volume-restore() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" busybox tar -xvf /backup/backup.tar "${@:2}"
  echo "Double checking files..."
  docker run --rm -v /tmp:/backup --volumes-from "$1" busybox ls -lh "${@:2}"
}

请注意,备份保存在/tmp中,因此您可以在docker主机之间移动保存在那里的备份文件。

还有两对备份/恢复别名。一个使用压缩和debian:jessie和另一个没有压缩但使用busybox。如果要备份的文件很大,建议使用压缩。

空俊语
2023-03-14

在“备份、恢复或迁移数据卷”一节中可以找到正式答案:

备份:

sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
  • --rm:当容器退出时将其卸下
  • ——数据中的卷:附加到数据容器共享的卷
  • -v$(pwd):/backup:绑定将当前目录装载到容器中;将tar文件写入
  • busybox:一个小而简单的图像-便于快速维护
  • tar cvf/backup/backup。tar/data:创建/data目录中所有文件的未压缩tar文件

恢复:

# create a new data container
$ sudo docker create -v /data --name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
 类似资料:
  • 正如Docker有关卷的文档中所述,存在所谓的仅数据容器的概念,它提供了一个可以装入多个其他容器的卷,无论仅数据容器是否实际运行。 基本上,这听起来很棒。但有一件事我不明白。 这些卷(如文档所述,出于可移植性原因,这些卷不会显式映射到主机上的文件夹)由Docker在主机上的某个内部文件夹中创建和管理()。 假设我使用这样一个卷,然后我需要将它从一台主机迁移到另一台主机——我如何移植该卷?AFAIC

  • 使用时,保存的图像是独立的,因此图像的大小会变大。(~对于10个图像,大小约为9GB) 在提取docker图像后,我探索: 有没有办法有效地导出图像? 注:我已经提到了这一点。这个问题不是它的重复。它没有解决我上面提到的用例。

  • 问题内容: 我在本地计算机上为postgres创建了一个docker卷。 然后,我使用了该卷并运行了一个docker。 之后,我做了一些数据库操作,这些操作自动存储在postgres-data中。现在,我想将该卷从本地计算机复制到另一台远程计算机。怎么做一样。 注意-数据库大小非常大 问题答案: 如果第二台计算机启用了SSH,则可以在第一台计算机上使用Alpine容器来映射该卷,将其捆绑并发送到第

  • 在设置到数据库的连接时出现,并在服务器上的日志文件夹中查看文件error_log,我看到。 谁能告诉我,我是否遗漏了一些必要的步骤,或者问题出在哪里?

  • 我希望使用ssh作为将托管在公司网络中的docker映像传输到私有云的传输机制。设置VPN连接将不是我的首选(因为它只是增加了复杂性)。有什么想法从哪里开始看这个吗 编辑:我和我的团队成员可能每天都要这样做很多次(拉和推)

  • 问题内容: 我目前在开发PC上使用Jenkins。我将其安装在开发PC上,因为我对该工具的了解有限。因此我在开发PC上对其进行了测试。现在,我对Jenkins感到很满意,可以作为我在构建过程中的长期“合作伙伴”,并希望将此Jenkins“移动”到专用服务器上。 在此之前,我完成了很少的构建,并从每个构建中存档了工件。特别是,对于我来说,内部版本号对于版本控制非常重要。 如何将所有Jenkins信息