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



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

如果我在这个Singularity容器中查看/etc/passwd,那么已经为我的主机用户ID向/etc/passwd添加了一个条目。

如果我不知道程序运行的用户ID,我如何制作一个可移植的奇点容器?

我已经将Docker容器转换为Singularity映像,但它希望以它定义的特定用户ID运行,并且有几个目录已被该用户chown'd。当我在Singularity下运行它时,我的主机用户没有访问这些目录的权限。

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

(我正在运行Singularity 2.5.2。(

首先,如果可能的话,升级到奇点的v3(和/或让集群管理员bug(。v2不再受支持,并且几个版本<2.6.1存在安全问题。

Singularity实际上是将主机系统的/etc/passwd安装到容器中,以便任何用户都可以运行它。不幸的是,这也有效地打击了任何可能由Dockerfile创建的用户。正如您所想,解决方案是将chmod的任何文件和目录都可读。CCD_ 9在CCD_。

由于最终的映像是只读的,因此允许写入权限不会有任何作用,而且养成只写入已装入映像的文件/目录的心态是很有用的。

实际上有一种比chmod 777更好的方法,那就是创建一个;香草";文件夹中的应用程序数据/conf,然后在运行时将其复制到容器中的目标目录中。

由于复制将由实际运行容器的用户执行,因此在目标目录中工作时不会有任何权限问题。

你可以看看我在这里做了什么来创建一个便携式远程桌面服务,例如:https://github.com/sarusso/Containers/blob/c30bd32/MinimalMetaDesktop/files/entrypoint.sh

这种方法与Docker和Singularity都兼容,但它是否是可行的解决方案取决于您的用例。最值得注意的是,它要求您使用--writable-tmpfs运行Singularity容器。

作为一般性的评论,请记住,即使奇点非常强大,它的行为也更像是一个环境,而不是一个容器引擎。您可以使用一些特定的选项(特别是--writable-tmpfs --containall --cleanenv --pid(使其更像容器一样工作,但它仍然有局限性(可变用户名和用户ID不会消失(。

最新更新