如何解决奇点沙箱文件管理
受够了与 lib 安装/依赖项问题的斗争,我开始使用 Singularity。 不过,我不确定我是否准确理解它在沙箱模式(不是数据、程序)下的文件管理是如何工作的。 例如,我设计了一个非常简单的定义文件,它只是一个“裸”的 Debian:
Bootstrap: library
From: debian
%post
apt-get update
我用这个创建了一个沙箱来添加东西:
sudo singularity build --sandbox Test/ naked_Debian.def
我尝试安装一个程序。但我不明白的是,我设法做到了,删除了沙箱目录,但我认为仍有在沙箱生命周期中创建的文件(在 /dev、/run、/root 等中)。例如,我从 git 克隆的程序现在位于我本地的 /root 中(独立于任何容器)。 据我所知,所有东西都在容器中,如果我删除沙箱目录,它应该会消失。否则,我会在所有测试中留下很多混乱吗?然后我无法将容器从系统移植到另一个系统。
如果我创建任何新的沙箱目录,程序就已经存在了。
干杯, 马修
解决方法
默认情况下,singularity 将 $HOME
挂载到容器并使用该路径作为 singularity shell / exec
的工作目录。由于您使用 sudo 运行沙箱,因此 /root
正在安装,如果您没有将 cd
复制到其他目录,那么您克隆的任何存储库都会在那里结束。 /tmp
也会自动装入,不过这不太可能导致问题,因为它只是临时文件。
您有几个选项可以避免文件出现在您不希望的地方。
- 禁用 home 的自动挂载:
singularity shell --no-home ...
- 默认工作目录现在是
/
而不是$HOME
并且文件直接在沙箱中创建(而不是安装在目录中) - 如果您想从沙箱中取出文件,您需要复制到容器内的
/tmp
,并在主机操作系统上从/tmp
复制到所需位置
- 默认工作目录现在是
- 设置一个不同的位置作为家:
singularity shell --home $PWD ...
- 这会装入并使用当前目录作为
$HOME
而不是主机操作系统上用户的$HOME
- 在主机操作系统和容器之间移动文件更简单,但仍会在主机操作系统中创建文件
- 这会装入并使用当前目录作为
- 根本不要挂载系统目录:
singularity shell --contain --workdir /some/dir ...
-
/tmp
和/var/tmp
的目录是在/some/dir
内创建的,而不是在主机上使用/tmp
和/var/tmp
。$HOME
与宿主机路径相同,用作工作目录,但为空,与宿主机操作系统分离 - 与主机操作系统完全分离,同时仍允许在容器和操作系统之间进行一些访问
-
有关这些选项的其他详细信息 can be found in the documentation。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。