docker与已激活的conda环境进行交互运行

时间:2020-10-12 18:39:34

标签: docker dockerfile conda

我想创建一个docker映像,以便在以交互方式运行它时,已经激活了conda环境。

当前状态:

docker run -it my_image
(base) root@1c32ba066db2:~# conda activate my_env
(my_env) root@1c32ba066db2:~#

所需状态:

docker run -it my_image
(my_env) root@1c32ba066db2:~#

更多信息:

在我的Dockerfile中,我包括了所有必要的RUN命令来安装conda,创建环境以及激活环境。相关部分摘录如下。

SHELL [ "/bin/bash", "--login", "-c" ]

...

# Install miniconda.
ENV CONDA_DIR $HOME/miniconda3
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
    chmod +x ~/miniconda.sh && \
    ~/miniconda.sh -b -p $CONDA_DIR && \
    rm ~/miniconda.sh
# Make non-activate conda commands available.
ENV PATH=$CONDA_DIR/bin:$PATH
# Make conda activate command available from /bin/bash --login shells.
RUN echo ". $CONDA_DIR/etc/profile.d/conda.sh" >> ~/.profile
# Make conda activate command available from /bin/bash --interative shells.
RUN conda init bash

# Create and activate the environment.
RUN conda env create --force -f environment.yml
RUN conda activate my_env

运行此命令时,conda activate my_env似乎可以运行并成功。但是,当我与docker run -it交互输入时,激活的环境为(base)

此外,我尝试将最后一个命令设为CMD conda activate my_env,但它只运行该命令,而不会进入交互模式。

1 个答案:

答案 0 :(得分:1)

每个RUN语句(包括docker run)都在新的Shell中执行,因此,不能简单地在RUN命令中激活环境并期望它在随后的{ {1}}命令。

相反,您需要在外壳初始化中激活环境。 RUN命令已被更改为包含SHELL,这很棒。现在,您只需要将--login添加到conda activate my_env.profile

.bashrc

,只需确保这是在Conda添加的部分之后。