【问题标题】:Exporting a Docker Container and Volume导出 Docker 容器和卷
【发布时间】:2021-09-24 20:19:35
【问题描述】:

我有一些学术代码,想在自包含的环境中分享,以便复制各种实验结果。

到目前为止,我的方法是一个 docker 容器,其中包含一些构建脚本来添加所需的依赖项,以及一个包含实际代码和数据的卷。

Dockerfile 似乎很容易共享,这将重新创建容器的状态;然后,其他人需要使用该卷启动一个 docker 容器,所以我需要导出该卷。

我已经尝试了Backup a container 和这个answer 中的步骤,但我不确定具体需要做什么。

该卷名为 offline-simon-vol,我使用 testcont 启动了一个容器

docker run -v offline-simon-vol --name testcont ubuntu /bin/bash

然后我尝试运行

docker run --rm --volumes-from testcont -v $(pwd)/backup ubuntu tar cvf /backup.backup.tar offline-simon-vol

执行没有错误,但我不知道备份卷在哪里!

我找不到有关所有这些标志的作用的文档。据我所知,这是启动“ubuntu”容器的新实例,但会加载testcont 中的所有卷。

我不知道$(pwd)/backup 在做什么;我链接的答案似乎说这是导出卷将出现的位置,但工作目录中没有出现任何新内容。

最后的tar 命令应该将offline-simon-vol 压缩为/backup.backup.tar(我认为)。但是当此命令完成时,/backup.backup.tar 不会出现在根目录中。我也不明白为什么输出文件名应该以/backup 开头,而不是例如工作目录。

最后,我链接的答案是/data,而不是卷名作为最后一个字,但是当我使用/data 时,它只会给我一个tar: /data: Cannot stat: No such file or directory 错误。

如何查找导出的卷,或将其导出到特定位置?此外,这是导出我的代码和数据以实现重现性的最佳方式吗?

【问题讨论】:

  • 如果我想重现您的实验并了解您的结果,我可能希望查看原始源代码,而不是构建和打包的 Docker 映像。对于这种特殊情况,包含实验代码和加载或重新生成数据的脚本的 GitHub 存储库可能会更好。
  • 源代码绝对是必不可少的,但这一切都进入了 docker 卷。主要问题是代码运行微软的量子开发工具包,安装起来很棘手(而且经常更改,Docker 没有帮助)。

标签: docker docker-volume


【解决方案1】:

docker run --rm --volumes-from testcont -v $(pwd)/backup ubuntu tar cvf /backup.backup.tar offline-simon-vol 命令是:

  • 运行带有从testcont 挂载的卷的 Ubuntu 容器
  • 将内容从offline-simon-vol在容器内压缩到/backup.backup.tar也在容器内
  • 安装主机的<current dir>/backup ($(pwd)/backup) 到容器中的同一路径。

实际上,此命令中的任何内容都不会在主机上备份目录,因为:

  • offline-simon-vol 可能不是容器内的正确路径
  • /backup.backup.tar容器内不是宿主机的映射卷
  • 没有将任何内容写入实际主机的挂载目录 ($(pwd)/backup)。

无论如何,解决方案:

  • 使用docker run --rm --volumes-from testcont -v $(pwd)/backup:/backup ubuntu tar cvf /backup/backup.tar /path/to/offline-simon-vol
  • 确保/path/to/offline-simon-vol 是容器内装入卷的正确路径。

【讨论】:

  • 我不知道在我使用的原始命令中将卷保存到了哪里,但我只是运行了另一个容器并指定了卷的位置。然后您给出的命令将卷中的所有文件打印到控制台,并在工作目录中生成一个名为“backup”的文件夹,但该文件夹是空的。
  • 您可以通过docker inspect testcont 查看卷在容器上的安装位置。在输出中查找offline-simon-vol
  • 当前主机目录中的 "backup" 文件夹应该具有包含所有压缩卷文件的文件 backup.tar(如果您没有看到任何内容,请尝试 sudo ls,因为该文件归根。
猜你喜欢
  • 2014-08-08
  • 2015-07-25
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多