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

新手上路,请多包涵

正如 Docker 关于 使用卷 的文档中所描述的,有所谓的纯 数据 容器的概念,它提供了一个可以挂载到多个其他容器中的卷,无论纯数据容器是否实际运行。

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

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

假设我使用这样的卷,然后我需要将它从一台主机迁移到另一台主机 - 我如何移植卷? AFAICS 它具有唯一的 ID - 我可以将卷及其相应的仅数据容器复制到新主机吗?如何找出要复制的文件?或者是否有一些我尚未发现的 Docker 内置支持?

原文由 Golo Roden 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 649
2 个回答

“备份、恢复或迁移数据卷” 部分提供了官方答案:

备份:

 sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

  • --rm : 容器退出时移除
  • --volumes-from DATA :附加到数据容器共享的卷
  • -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

原文由 tommasop 发布,翻译遵循 CC BY-SA 4.0 许可协议

扩展 Docker 文档 的官方答案和 此处的最佳答案,您可以在 .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。如果要备份的文件很大,请使用压缩。

原文由 Luís Bianchin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题