首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker,CentOS:如何在bash中用环境模块自动加载模块?

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

Stack Overflow用户
提问于 2019-08-20 19:30:14
回答 1查看 1.1K关注 0票数 1

我想自动加载一个CentOS码头容器中的模块。

通常,我会将命令放在.bashrc / .bash_profile中,但我似乎无法让它工作。

下面是我当前Dockerfile的开始:

代码语言:javascript
复制
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

...

这是一个有效的命令:

代码语言:javascript
复制
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中添加许多回显命令的组合,但似乎无法使其工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-22 05:50:04

在您描述的docker run命令中,bash是以非交互模式作为非登录shell启动的。在这种情况下,bash不计算它的初始化配置文件,比如~/.bash_profile~/.bashrc

为了适应此上下文中的bash初始化,可以使用BASH_ENV变量。在非交互模式下启动时,如果设置了该变量,bash将来源于该变量所指向的文件。

因此,我建议将您的码头形象的定义修改如下:

  • 创建一个~/.bashenv文件,以保存mpi模块文件的环境模块初始化命令和加载。
  • 然后声明BASH_ENV变量,指向图像定义中的/root/.bashenv,以便在创建的容器上运行命令时设置它。
代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57580395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档