【发布时间】:2019-10-23 22:05:40
【问题描述】:
我已经尝试了几个小时,但无法弄清楚如何在构建过程中在 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 镜像后运行 3 个命令有效(即在调用 docker run container-name 后以交互方式运行),但由于某种原因,它在 构建 容器时不起作用。我发现 $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,运行 $ 康达初始化 目前支持的 shell 有: - 重击 - 鱼 -tcsh - xonsh -zsh - 电源外壳 有关更多信息和选项,请参阅“conda init --help”。 重要提示:运行“conda init”后,您可能需要关闭并重新启动 shell。
为什么这不起作用???
我已经看到可能有使用 miniconda docker 模板的解决方法,但我不能使用它。 Docker搭建过程中如何创建和切换anaconda环境?谢谢!
【问题讨论】:
-
通常在 Docker 中,您不需要像 Conda 这样可以管理多个并发隔离软件安装的工具:Docker 本身提供了这种隔离。对于 Python 包,只需在 Dockerfile 中运行
pip install即可将内容安装到“系统”Python 中(与您正在构建的映像隔离)。 -
没关系,但我需要运行特定版本的python。所以我需要为此创建一个新的 anaconda 环境。
-
你试过把
RUN conda activate base改成RUN bash -c "conda activate base"吗? -
@DavidMaze 一些包仅通过 Anaconda 分发,在 PyPI 上不可用
标签: python anaconda dockerfile miniconda