参考:
首先可以先运行如下命令,看下当前镜像中的所有环境变量:
singularity exec env.sif env
HOME=/home/dave
LANG=C
LD_LIBRARY_PATH=/.singularity.d/libs
PATH=/startpath:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PROMPT_COMMAND=PS1="Singularity> "; unset PROMPT_COMMAND
PS1=Singularity>
PWD=/home/dave/doc-tesrts
SINGULARITY_COMMAND=exec
SINGULARITY_CONTAINER=/home/dave/doc-tesrts/env.sif
SINGULARITY_ENVIRONMENT=/.singularity.d/env/91-environment.sh
SINGULARITY_NAME=env.sif
TERM=xterm-256color
其中常见的变量有这些
-
SINGULARITY_COMMAND
how the container was started, e.g.exec
/run
/shell
-
SINGULARITY_CONTAINER
the full path to the container image. -
SINGULARITY_ENVIRONMENT
path inside the container to the shell script holding the container image environment settings. -
SINGULARITY_NAME
name of the container image, e.g.myfile.sif
ordocker://ubuntu
-
SINGULARITY_BIND
a list of bind paths that the user requested, via flags or environment variables, when running the container.
我们使用比较多的应该就是SINGULARITY_ENVIRONMENT
和SINGULARITY_BIND
分别用于设置环境变量和bind 路径
设置/修改镜像中的环境变量,有如下几种方式。
1、在def文件中设置环境变量
def文件可以从一个现有的sif文件中构建镜像,可以在构建的过程中直接设置好环境变量。
%environment
export VARIABLE_NAME=value
示例:
%environment
export LC_ALL=zh_CN.UTF-8 #C 这里可以兼容上特殊字符
export PATH=/miniconda3/bin:$PATH
此外,如果你想要在构建过程中根据条件设置环境变量,你可以在%post
部分使用 shell 脚本来设置它们:
%post
echo "Setting environment variables"
export MY_ENV_VAR=some_value
echo "MY_ENV_VAR=$MY_ENV_VAR" >> /environment
示例:
%post
echo ". /miniconda3/etc/profile.d/conda.sh" >> $SINGULARITY_ENVIRONMENT
echo "source /miniconda3/bin/activate st_seurat_v4" >> $SINGULARITY_ENVIRONMENT
echo "export R_USER_CACHE_DIR=/miniconda3/envs/test/wget_lib/" >> $SINGULARITY_ENVIRONMENT # /.singularity.d/env/91-environment.sh
这里的$SINGULARITY_ENVIRONMEN
对应的就是/.singularity.d/env/91-environment.sh
这个文件下文会讲到,是镜像环境中的一个环境变量设置文件。
2、在.singularity.d/文件夹设置环境变量
如果是使用容器构建镜像,则需要在Singularity容器中进行环境变量的设置。
/.singularity.d/env/
目录是一个特殊的目录,用于存储环境变量文件。这些文件在容器启动时按照顺序被自动执行,以设置或修改环境变量。以下是一些常见的文件:
- 01-base.sh:
通常用于设置基础环境变量,而其他以90-, 99-开头的脚本文件可能会设置更具体的环境变量或应用特定的配置。- 90-environment.sh:
这是一个环境变量文件,通常用于设置<u>容器启动时的环境变量</u>。你可以在这个文件中添加任何需要的环境变量。对应的是def中%environment中的变量- 91-environment.sh:
类似于 90-environment.sh。是def文件在%post中设置到$SINGULARITY_ENVIRONMEN的变量- 94-appsbase.sh:
这个文件可能用于设置与容器内特定应用程序相关的环境变量,如应用程序的安装路径、配置文件路径等。- 95-apps.sh:
类似于94-appsbase.sh,这个文件可能用于设置其他应用程序的环境变量或执行应用程序特定的环境配置。- 99-base.sh:
这个文件可能用于设置一些最终的环境变量或执行最后的清理工作,这些工作在容器启动前完成。
3、在命令行设置环境变量
在Singularity 3.6之后的版本,可以使用 --env
和--env-file
在运行的命令行中设置环境变量。
示例:
singularity run --env MYVAR=Goodbye env.sif