78059


以下のようなDockefileを作成しました。  
ここで、environmant-modules は openmpi-devel と一緒にインストールされます。  
また、sourceコマンドを使うために、SHELLでbashを指定しています。

[code]

    FROM almalinux:latest
    RUN dnf -y install openmpi-devel
    SHELL ["/bin/bash", "-c"]
    RUN source /etc/profile.d/modules.sh
    RUN module load mpi/openmpi-x86_64
    CMD /bin/bash
    
[/code]

これをbuildします。

[code]

    > docker build -t test:test .
    
[/code]

すると下記のようなエラーがでて、build中にmoduleコマンドを実行することができません。

[code]

     => ERROR [5/5] RUN module load mpi/openmpi-x86_64
    ------
     > [5/5] RUN module load mpi/openmpi-x86_64:
    #7 0.176 /bin/bash: module: command not found
    ------
    executor failed running [/bin/bash -c module load mpi/openmpi-x86_64]: exit code: 127
    
[/code]

一方、以下のDockerfileに対して、

[code]

    FROM almalinux:latest
    RUN dnf -y install openmpi-devel
    CMD /bin/bash
    
[/code]

build、runを行い。

[code]

    > docker build -t test:test .
    > docker run -it --rm test:test
    
[/code]

コンテナ内でmoduleコマンドを使うと、

[code]

    > module avail
    
[/code]

下記のようにエラー無く適切な結果が得られることは確認できました。

[code]

    ----- /usr/share/Modules/modulefiles ------
    dot  module-git  module-info  modules  null  use.own  
    ------ /etc/modulefiles ------
    mpi/openmpi-x86_64  
    ------ /usr/share/modulefiles ------
    pmi/pmix-x86_64
    
[/code]

build中にも module コマンドを使う方法はないでしょうか？


CC BY-SA 4.0
2021-07-08T14:38:08.630
78056
2021-07-09T03:05:35.880
2021-07-09T03:05:35.880
3060
47205
question
docker
Dockerfileのbuild中にEnvironment Modulesのmoduleコマンドが使えない


[Dockerfile リファレンス](https://docs.docker.jp/engine/reference/builder.html#id2)

> 各命令は個別に実行されます。 それによって新たなイメージがビルドされます。したがって、たとえば `RUN cd /tmp`
> を実行したとしても、次の命令には何の効果も与えません。

`source /etc/profile.d/modules.sh` と `module load mpi/openmpi-x86_64` は別個の
`bash` プロセス内で実行されますので質問欄にあるエラーが発生することになります。なので、2行の `RUN` コマンドを1行にまとめる必要があります。

#### Dockerfile

[code]

    FROM almalinux:latest
    RUN dnf -y install openmpi-devel
    SHELL ["/bin/bash", "-c"]
    RUN source /etc/profile.d/modules.sh && module load mpi/openmpi-x86_64
    CMD /bin/bash
    
[/code]


CC BY-SA 4.0
2021-07-08T16:45:59.453
78059
2021-07-08T16:45:59.453
47127
78056
answer