私は単純なドッカーイメージをセットアップしようとしています(私はドッカーに非常に新しいので、一般に基づいて考えられる誤解)を修正してください- continuumio/anaconda コンテナー。
Dockerfile
:
FROM continuumio/anaconda3:latest
# update conda and setup environment
RUN conda update conda -y \
&& conda env list \
&& conda create -n testenv pip -y \
&& source activate testenv \
&& conda env list
建物とこれからの画像docker build -t test .
はエラーで終了します:
/bin/sh: 1: source: not found
新しい仮想環境をアクティブ化するとき。
以下 この答え 私が試した:
FROM continuumio/anaconda3:latest
# update conda and setup environment
RUN conda update conda -y \
&& conda env list \
&& conda create -y -n testenv pip \
&& /bin/bash -c "source activate testenv" \
&& conda env list
これは次のように出力するため、最初は機能しているようです:prepending /opt/conda/envs/testenv/bin to PATH
、 だが conda env list
およびecho $PATH
ないことを明確に示します:
[...]
# conda environments:
#
testenv /opt/conda/envs/testenv
root * /opt/conda
---> 80a77e55a11f
Removing intermediate container 33982c006f94
Step 3 : RUN echo $PATH
---> Running in a30bb3706731
/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DockerファイルはそのままMWEとして機能します。どんなアイデアにも感謝します。ありがとう!
Docker ENV
命令を使用すると、仮想環境パスをPATH
に永続的に追加できます。 ただし、これはconda env list
にリストされている選択された環境を解決しません。
MWEを参照してください。
FROM continuumio/anaconda3:latest
# update conda and setup environment
RUN conda update conda -y \
&& conda create -y -n testenv pip
ENV PATH /opt/conda/envs/testenv/bin:$PATH
RUN echo $PATH
RUN conda env list
Ccauetの答え(私はそれを実現することができませんでした)をピギーバックし、Charles DuffeyはPATH
以外にもそれがあることについてのコメントがあります。ここで問題を処理します。
環境をアクティブ化すると、condaは次の変数と、環境を非アクティブ化するときに参照できるいくつかのバックアップデフォルト値を設定します。ルートコンダ環境を再び使用する必要がないため、これらの変数はDockerfileから省略されています。参考までに、これらはCONDA_PATH_BACKUP
、CONDA_PS1_BACKUP
、および_CONDA_SET_PROJ_LIB
です。また、ターミナルプロンプト行の左側にPS1
を表示するために(testenv)
も設定しますが、これも省略されています。次のステートメントはあなたが望むことをします。
ENV PATH /opt/conda/envs/testenv/bin:$PATH
ENV CONDA_DEFAULT_ENV testenv
ENV CONDA_PREFIX /opt/conda/envs/testenv
作成されるレイヤーの数を減らすために、これらのコマンドを1つのENVコマンドに組み合わせて、すべての変数を一度に設定することもできます。
パッケージに基づいて、設定する必要がある他のいくつかの変数があるかもしれません。例えば、
ENV GDAL_DATA /opt/conda/envs/testenv/share/gdal
ENV CPL_Zip_ENCODING UTF-8
ENV PROJ_LIB /opt/conda/envs/testenv/share/proj
この情報を取得する簡単な方法は、ルート環境でprintenv > root_env.txt
を呼び出し、testenv
をアクティブにしてからprintenv > test_env.txt
を呼び出し、diff root_env.txt test_env.txt
を調べることです。