Как использовать файл yaml с dockerfile для активации среды conda - PullRequest
1 голос
/ 11 декабря 2019

Я пытаюсь создать образ докера с новой средой conda, указанной в файле environment.yml, который затем автоматически активируется при вызове docker run. Я точно следовал рабочему процессу с this post, и теперь после многих исследований я в тупике. Я также много копался при переполнении стека, например, здесь , но так что не повезло.

Вот содержимое моего 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

Любая мудрость здесь будет высоко ценится.

1 Ответ

1 голос
/ 16 декабря 2019

Я отвечаю на свой вопрос, но только в случае, если кто-то столкнется с той же проблемой. Вся заслуга принадлежит @matmaticsmichael! (см. нижнюю часть этой темы )

Оказывается, мне нужно было добавить переменную окружения CONDA_DEFAULT_ENV в конец файла Docker:

For completeness, here is the full contents of the 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)
...