Dockerfile の中で conda activate できないときの対処法

Dockerfile でビルド中に conda activate しようとすると、conda init しろみたいなメッセージが出るけど、それを書いたところで解決しない。ちょっと調べてもなかなか良い workaround が見つからなかったのでメモしておく。

これを回避するためには大きく2つの方法があり、一つは conda run を使う方法で、もう一つは RUN の中身を実行する SHELL をインタラクティブにする方法。

conda run を使う方法

RUN <<EOF
set -xe
conda run -n <env> <command>
EOF

みたいにすると、conda 環境の中でコマンドを実行してくれる。ただ、これだけだとコマンドによってはインタラクティブなシェルで実行するときと挙動が変わるものがあって、思った結果にならないことがある。

SHELL をインタラクティブにする方法

これは、SHELL を明示的に指定する方法。

SHELL ["/bin/bash", "-i", "-c"]

RUN <<EOF
set -xe
conda activate <env>
command
coda deactivate

こうすると、-i によりインタラクティブなシェルで実行される。この場合、conda activate できるので普段の使い方と同様のスクリプトを書くことができる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です