Singularity 容器中的文件所有权和权限

rgo*_*gov 5 hpc singularity-container

当我运行时singularity exec foo.simg whoami,我从主机获取自己的用户名,这与在 Docker 中我获取root或容器指定的用户不同。

如果我查看/etc/passwd这个 Singularity 容器的内部,就会发现已为我的主机用户 ID 添加了一个条目/etc/passwd

如果我不知道程序运行时的用户 ID,如何制作便携式 Singularity 容器?

我已将 Docker 容器转换为 Singularity 映像,但它希望作为它定义的特定用户 ID 运行,并且已将多个目录chown分配给该用户。当我在 Singularity 下运行它时,我的主机用户无权访问这些目录。

这将是一个黑客,但我可以修改所有这些目录的图像chmod 777。有没有更好的方法让这个图像像任何用户一样在 Singularity 上工作?

(我正在运行 Singularity 2.5.2。)

tsn*_*lan 4

首先,如果可能的话,升级到 Singularity v3(和/或让您的集群管理员这样做)。v2 不再受支持,并且多个 <2.6.1 版本存在安全问题。

奇点实际上是将主机系统安装/etc/passwd到容器中,以便任何用户都可以运行它。不幸的是,这也有效地破坏了 Dockerfile 创建的任何用户。解决方案正如您所想的那样,使chmod任何文件和目录都可供所有人读取。chmod -R o+rX /path/to/base/dir一步%post最简单。

由于最终的映像是只读的,因此允许写入权限不会执行任何操作,并且进入仅写入已安装到映像的文件/目录的心态很有用。