【问题标题】:How to use a yaml file with dockerfile to activate conda environment如何使用带有 dockerfile 的 yaml 文件来激活 conda 环境
【发布时间】:2020-04-04 23:29:45
【问题描述】:

我正在尝试使用environment.yml 文件中指定的新 conda 环境创建 docker 映像,然后在调用 docker run 时自动激活该环境。我已经完全按照this post 的工作流程进行了操作,经过大量研究后,我现在很困惑。我也做了很多关于堆栈溢出的挖掘,例如here,但运气不好。

这是我的dockerfile 的内容(我相信这应该是完全可重现的):

FROM continuumio/anaconda3

ADD environment.yml /tmp/environment.yml
RUN conda env create -f /tmp/environment.yml

RUN echo "conda activate $(head -1 /tmp/environment.yml | cut -d' ' -f2)" >> ~/.bashrc
ENV PATH /opt/conda/envs/$(head -1 /tmp/environment.yml | cut -d' ' -f2)/bin:$PATH

以及定义环境的yaml文件:

name: pointcloudz

channels:
  - conda-forge
  - defaults

dependencies:
  - python=3.7
  - gdal
  - pdal
  - entwine

dockerfile 构建没有错误,但是当我执行时

docker run -it pdal_pipeline

我收到以下错误(在容器内),并且新环境未激活:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init <SHELL_NAME>

我已经深入互联网寻找答案,但找不到解决方案。我真的需要创建环境,将environment.yml 中指定的包安装到其中,并在运行容器时自动运行。奇怪的是,下面的dockerfile 环境是直接使用conda create 创建的,而不是yaml 文件的工作方式完全符合预期,但我无法从dockerfile 将所需的包安装到新创建的环境中自己。

FROM continuumio/miniconda3
RUN conda create -n env python=3.6
RUN echo "source activate env" > ~/.bashrc
ENV PATH /opt/conda/envs/env/bin:$PATH

这里的任何智慧都会受到极大的赞赏。

【问题讨论】:

  • 我没有看到您在错误消息中尝试过建议操作的任何地方。您是否尝试在 Dockerfile 中使用 RUN conda init bash
  • 我刚刚尝试了这个示例,它对我来说效果很好。也许您需要在 docker build 上使用 --pull 以确保 continuumio/anaconda3 是最新的图像。不要修改 PATH,conda activate 会为您完成。 (并且 head 命令没有作为 ENV 的一部分解析,命令本身被添加到 PATH)

标签: python docker anaconda yaml conda


【解决方案1】:

我正在回答我自己的问题,但前提是有人遇到同样的问题。所有功劳都归功于@mathematicalmichael! (见底部this thread

原来我需要在 dockerfile 的末尾添加一个 CONDA_DEFAULT_ENV 环境变量:

为了完整起见,这里是 dockerfile 的完整内容:

FROM continuumio/miniconda3

ADD environment.yml /tmp/environment.yml
RUN conda env create -f /tmp/environment.yml

RUN echo "conda activate $(head -1 /tmp/environment.yml | cut -d' ' -f2)" >> ~/.bashrc
ENV PATH /opt/conda/envs/$(head -1 /tmp/environment.yml | cut -d' ' -f2)/bin:$PATH

ENV CONDA_DEFAULT_ENV $(head -1 /tmp/environment.yml | cut -d' ' -f2)

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2019-09-06
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多