在 Singularity 中读取主机系统的环境变量构建时间

Read host system's environment variables build time in Singularity

当我构建 Singularity 容器时,我想在 %post 部分从主机系统读取环境变量。我一直在网上寻找实现这一目标的方法,但无济于事。我开始怀疑目前这是否可能,但我找不到任何关于它的提及 possible/impossible.

示例:

奇点定义文件:配方

BootStrap: docker
From: continuumio/anaconda3

%runscript

%post
    echo $TEST_ENV_VARIABLE

在主机系统上/OS

export TEST_ENV_VARIABLE='foo'
sudo singularity build test.sif recipe

回显时只打印一个空行 TEST_ENV_VARIABLE。

如果在 %post 部分无法读取主机系统的环境变量,是否有任何其他方法可以将参数传递到可以在构建时使用的配方中?

目前无法做到这一点,though there is an open issue 无法实现该功能。我个人不是动态构建选项的粉丝,因为它更难保证可重复性。

如果您想要更动态的东西,您可以使用模板来创建不同的定义文件。一个非常简单的例子:

$ cat gen_def.py
#!/usr/bin/env python3
import sys

my_def = """BootStrap: docker
From: continuumio/anaconda3

%post
    echo This is {0}
    echo This is {1}"""

print(my_def.format(*sys.argv[1:]))

$ ./gen_def.py one two > Singularity.custom

$ sudo singularity build test.sif Singularity.custom