我尝试了好几个小时,都不知道如何在构建过程中在Docker文件中激活和切换Anaconda环境。
这里是最初的代码。
FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu16.04
# Set user
ENV SETUSER myuser
RUN useradd -m $SETUSER
USER $SETUSER
WORKDIR /home/$SETUSER
# Install Anaconda
RUN wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh
RUN bash Anaconda3-2019.03-Linux-x86_64.sh -b
RUN rm Anaconda3-2019.03-Linux-x86_64.sh
# Set path to conda
ENV CONDA_ENV_NAME mynewenv
RUN /home/$SETUSER/anaconda3/condabin/conda create -q --name $CONDA_ENV_NAME python=3.6 && \
/home/$SETUSER/anaconda3/condabin/conda clean --yes --all
RUN /home/$SETUSER/anaconda3/condabin/conda activate base #Just for testing anaconda environment
起初,Docker中的Anaconda会抱怨shell没有设置好,所以在conda创建命令后我加入了。
RUN /home/$SETUSER/anaconda3/condabin/conda init bash
RUN /bin/bash -c "source /home/$SETUSER/.bashrc"
RUN /home/$SETUSER/anaconda3/condabin/conda activate base
在构建docker镜像后运行这3条命令可以工作(即在调用docker run container-name后交互运行),但由于某些原因,在以下情况下不能工作building容器。我发现$PATH变量在构建过程中没有被更新,所以在构建时和构建后比较了我的$PATH。
ENV PATH /home/$SETUSER/anaconda3/envs/$CONDA_ENV_NAME/bin:$PATH
ENV PATH /home/$SETUSER/anaconda3/condabin:$PATH
ENV PATH /home/$SETUSER/anaconda3/bin:$PATH
RUN conda init bash
RUN /bin/bash -c "source /home/$SETUSER/.bashrc"
RUN conda activate base
现在,构建时的Docker $PATH和构建后运行容器时交互式修改的$PATH是一样的,但我仍然得到shell没有正确设置的错误。
CommandNotFoundError。你的shell没有被正确配置为使用'conda activate'。
要初始化你的外壳,请运行
$ conda init
目前支持的shell是
- bash
- fish
- tcsh
- xonsh
- zsh
- 权力的象征
参见'conda init --help'获取更多信息和选项。
重要的是:你可能需要在运行'conda init'后关闭并重新启动你的shell。
Why is this not working???
我看到可能有使用miniconda docker模板的变通办法,但我不能用。我如何在Docker构建过程中创建和切换Anaconda环境?谢谢!