CentOS Docker:如何在bash shell中使用环境模块自动加载模块?

CentOS Docker:如何在bash shell中使用环境模块自动加载模块?,bash,docker,centos,centos7,environment-modules,Bash,Docker,Centos,Centos7,Environment Modules,我想在CentOS Docker容器中自动加载模块 通常,我会将命令放在.bashrc/.bash\u配置文件中,但我似乎无法让它工作 以下是我当前Dockerfile的开始: FROM centos:7.6.1810 RUN yum update -y && yum clean all RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm \ && yum instal

我想在CentOS Docker容器中自动加载模块

通常,我会将命令放在
.bashrc
/
.bash\u配置文件中,但我似乎无法让它工作

以下是我当前Dockerfile的开始:

FROM centos:7.6.1810

RUN yum update -y && yum clean all

RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm \
    && yum install -y python36u python36u-libs python36u-devel python36u-pip \
    && yum install -y environment-modules mpich mpich-devel gcc-c++ \
    && yum install -y git

RUN echo "source /usr/share/Modules/init/bash" >> /root/.bash_profile \
    && echo "module load mpi/mpich-x86_64" >> /root/.bash_profile \
    && update-alternatives --install /usr/bin/python python /usr/bin/python2 50 \
    && update-alternatives --install /usr/bin/python python /usr/bin/python3.6 60

WORKDIR /app

...
这是有效的命令:

docker run -t my_image:tag /bin/bash -c "source /usr/share/Modules/init/bash; module load mpi/mpich-x86_64; mpiexec"
但是我想让docker运行我的图片:tag/bin/bash-c“mpiexec”


我已经尝试过向例如
/root/.bashrc
/app/.bash\u profile
添加许多回音命令组合,但似乎无法实现这一点。

在您描述的
docker run
命令中,
bash
以非交互模式作为非登录shell启动。在此上下文中,
bash
不会评估其初始化配置文件,如
~/.bash\u profile
~/.bashrc

要在此上下文中适应
bash
初始化,可以使用
bash_ENV
变量。在非交互模式下启动时,
bash
将此变量指向的文件(如果已设置)作为源文件

因此,我建议调整docker图像的定义,如下所示:

  • 创建一个
    ~/.bashenv
    文件来保存环境模块初始化命令和mpi模块文件的加载
  • 然后在图像定义中声明指向
    /root/.bashenv
    BASH_ENV
    变量,以便在创建的容器上运行命令时对其进行设置

manbash
,部分
调用
描述了如何以及何时加载不同的配置文件。
FROM centos:7.6.1810

RUN yum update -y && yum clean all

RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm \
    && yum install -y python36u python36u-libs python36u-devel python36u-pip \
    && yum install -y environment-modules mpich mpich-devel gcc-c++ \
    && yum install -y git
    && update-alternatives --install /usr/bin/python python /usr/bin/python2 50 \
    && update-alternatives --install /usr/bin/python python /usr/bin/python3.6 60 \
    && echo "source /usr/share/Modules/init/bash" >> /root/.bashenv \
    && echo "module load mpi/mpich-x86_64" >> /root/.bashenv \
    && echo "[[ -s ~/.bashenv ]] && source ~/.bashenv" >> /root/.bash_profile \
    && echo "[[ -s ~/.bashenv ]] && source ~/.bashenv" >> /root/.bashrc

ENV BASH_ENV=/root/.bashenv

WORKDIR /app