具有相对于它的路径的奇点定义文件

Singularity definition file with paths relative to it

问题

使用定义文件构建 Singularity 图像时,是否可以指定主机系统上文件相对于定义文件的路径(即独立于调用构建命令的位置)?

说明问题的示例

我在同一目录中有以下文件(例如 git 存储库):

foobar.def 看起来如下:

Bootstrap: library
From: ubuntu:20.04
Stage: build

%files
    # Add some_file.txt at the root of the image
    some_file.txt /some_file.txt

当我在包含文件 :

的目录中使用以下命令 构建时,这工作正常
singularity build --fakeroot foobar.sif foobar.def

但是,如果我从其他任何地方(例如,从专用的“构建”目录)调用构建命令,它会失败,因为它搜索 some_file.txt 相对于构建命令的当前工作目录,而不是相对于定义文件。

有没有一种方法可以实现定义文件,使构建工作独立于调用命令的位置?我知道我可以使用绝对路径,但这对我来说不是一个可行的解决方案。

更复杂的是:我的实际定义文件是从位于构建目录中的另一个本地映像引导的。所以理想情况下,我需要一个解决方案,其中一些文件是相对于工作目录找到的,而另一些是相对于定义文件的位置找到的。

简答:不是真的

更长的答案:不是真的,但这是有原因的,对于大多数用例来说,这并不重要。虽然 Docker 采取了让您指定目录上下文的方式,但 Singularity 决定将其所有命令都基于当前执行它的目录。这也遵循 $PWD 被自动安装到容器中,因此保持一致是有意义的。

就是说,您不能从 repo 目录中 运行 singularity build --fakeroot $build_dir/foobar.sif foobar.def 是什么原因?除了最终图像之外,没有写入任何其他输出,并且将数据用作工作上下文的目录更有意义。