导出 Docker 容器和卷

Exporting a Docker Container and Volume

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

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

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

我已经尝试了 Backup a container and this 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 run --rm --volumes-from testcont -v $(pwd)/backup ubuntu tar cvf /backup.backup.tar offline-simon-vol命令是:

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

实际上,此命令中的 none 内容将在主机上生成备份目录,因为:

  • 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 是容器 中已安装卷的正确路径