导出 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
是容器 中已安装卷的正确路径 。
我有一些学术代码想在自包含的环境中共享,以便可以复制各种实验结果。
到目前为止,我的方法是一个 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
是容器 中已安装卷的正确路径 。