Я пытаюсь создать образ докера с новой средой 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
Любая мудрость здесь будет высоко ценится.