具有相对于它的路径的奇点定义文件
Singularity definition file with paths relative to it
问题
使用定义文件构建 Singularity 图像时,是否可以指定主机系统上文件相对于定义文件的路径(即独立于调用构建命令的位置)?
说明问题的示例
我在同一目录中有以下文件(例如 git 存储库):
- foobar.def
- some_file.txt
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
是什么原因?除了最终图像之外,没有写入任何其他输出,并且将数据用作工作上下文的目录更有意义。
问题
使用定义文件构建 Singularity 图像时,是否可以指定主机系统上文件相对于定义文件的路径(即独立于调用构建命令的位置)?
说明问题的示例
我在同一目录中有以下文件(例如 git 存储库):
- foobar.def
- some_file.txt
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
是什么原因?除了最终图像之外,没有写入任何其他输出,并且将数据用作工作上下文的目录更有意义。