[英]Docker, CentOS: How to automate loading of modules with environment-modules, in bash shell?
我想自动在CentOS Docker容器中加载模块。
通常,我会将命令放在.bashrc
/ .bash_profile
,但似乎无法正常工作。
这是我当前的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 run -t my_image:tag /bin/bash -c "mpiexec"
即可工作。
我尝试过将回显命令的多种组合添加到/root/.bashrc
或/app/.bash_profile
,但似乎无法/app/.bash_profile
正常工作。
在您描述的docker run
命令上, bash
作为非登录shell以非交互模式启动。 在这种情况下, bash
不会评估其初始化配置文件,例如~/.bash_profile
或~/.bashrc
。
为了适应这种情况下的bash
初始化,可以使用BASH_ENV
变量。 在非交互模式下启动时, bash
获取此变量所指向的文件(如果已设置)。
因此,我建议将您的docker映像的定义修改如下:
~/.bashenv
文件来保存环境模块的初始化命令并加载mpi modulefile /root/.bashenv
BASH_ENV
变量进行设置 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.