如何解决为什么`singularity run/exec` 会自动绑定特定的某些目录?用例是什么?
我熟悉容器,但对 Singularity 不熟悉,我发现自己今晚在 Singularity 容器中与损坏的 Python 安装作斗争。事实证明,这是因为 $HOME
在我不知情的情况下被挂载到我的容器中。
我想我已经喜欢上了 Python 的成语“显式优于隐式”。对我来说,自动挂载特定目录是意外行为。
三个问题:
- 为什么 Singularity 默认挂载 $HOME、/tmp、/proc 等?
- 为了让我更适应 Singularity,这种行为有哪些用例?
- 我看到了
--no-home
标志,但是否有一个标志可以禁用所有默认安装而不需要更改默认 Singularity 配置?
解决方法
它融合了设计、便利性和技术必要性。
最大的原因是,除非您使用某些参数另有说明,否则 Singularity 图像是只读文件系统。您需要在某个地方写入输出以及在此过程中创建的任何临时文件。也许您知道在输出目录中挂载,但是在后台创建/修改/删除了我们从未想过的各种文件。隐式自动挂载提供适用于大多数情况的合理默认值。
简单示例:您正在对某些数据进行大 E
和过滤操作,但您将结果打印到控制台,因此除了原始数据外,您无需安装任何内容。但即使经过一些操作和过滤,数据的大小也超过了可用内存,因此 sort 在进程完成时被删除之前会回退到使用 element = input()
if element == 'E':
break
v.append(int(element))
中的小文件。然后它崩溃了,因为您无法写入 sort
。
您可以要求用户在运行时手动指定要挂载到 /tmp
的内容,或者您可以使用像 /tmp
这样合理的默认值并允许用户覆盖它({{ 1}}、/tmp
、/tmp
)。这些也是可配置的,因此管理员可以设置特定于运行环境的合理默认值。
某些坐骑也有技术原因。 例如 SINGULARITY_TMPDIR
和 -B $PWD/fake_tmp:/tmp
需要匹配主机操作系统的权限。 bind paths and mounts 上的文档实际上非常好,并且对内容和原因有更详细的说明,甚至还有第三个问题的答案:--contain/--containall
。 /etc/passwd
标志可能也很有趣。如果您真的想要深潜,还有 admin docs 和 source code on github。
一个简单但真实的奇点用例,并附有说明:
/etc/group
--no-mount
:你已经体验过意外挂载的乐趣,还有意外的环境变量! --contain/--containall
告诉 Singularity 不要在容器中持久化主机执行环境。你仍然可以使用,例如,singularity exec \
--cleanenv \
-H $PWD:/home \
-B /some/local/data:/data \
multiqc.sif \
multiqc -i $SAMPLE_ID /data
在容器内有 --cleanenv / -e
,因为它是明确设置的。
--cleanenv/-e
:这会将当前目录挂载到容器中到 SINGULARITYENV_SOMEVAR=23
并设置 SOMEVAR=23
。虽然使用 -H $PWD:/home
和显式挂载可能是更好的解决方案,但我很懒惰,这确保了以下几点:
-
当前目录被挂载到容器中。如果映像中不存在基本目录,则允许工作的隐式挂载失败,并且会安静地挂载。例如,如果您从
/home
运行并且您的映像中没有HOME=/home
,则它不会被装入。如果直接使用显式绑定 (--contain/--containall
),这不是问题或者如果显式绑定具有与当前目录的共享路径 (/cluster/my-lab/some-project
)。 -
命令是从当前目录的上下文中执行的。如果
/cluster
无法按上述方式挂载,Singularity 将使用-B /cluster/my-lab/some-project
作为工作目录。如果-B /cluster/data/experiment-123
和$PWD
都无法挂载,则使用$HOME
。如果您使用的是相对路径并且您不在预期位置,这可能会导致问题。由于它特定于主机上的路径,因此尝试在本地复制问题时会真的很烦人。 -
无论主机操作系统文件结构如何,容器内的基本路径始终相同。一致性很好。
剩下的就是正在运行的命令,在这种情况下,它总结了其他处理遗传数据的程序的日志。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。