我已经尝试了几个小时,但是无法弄清如何在Dockerfile的构建过程中激活和切换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 create 命令后面我添加了以下内容:
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 镜像后执行这三个命令是有效的(即在调用 docker run 容器名称后交互式运行),但由于某种原因,在构建容器时不起作用。我发现在构建过程中 $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'。 要初始化您的shell,请运行 $ conda init 当前支持的shell是: - bash - fish - tcsh - xonsh - zsh - powershell 有关更多信息和选项,请参见“conda init --help”。 重要提示:在运行“conda init”之后,您可能需要关闭并重新启动shell。
为什么这不起作用?
我看到可能有一种解决方法是使用miniconda docker模板,但我不能使用那个。如何在Docker构建过程中创建和切换anaconda环境?谢谢!
pip install
即可将其安装到“系统”Python中(隔离到您正在构建的镜像)。 - David MazeRUN conda activate base
更改为RUN bash -c "conda activate base"
吗? - Andrew Li