在 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
当我构建 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