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
できるので普段の使い方と同様のスクリプトを書くことができる。