Я пытался часами и не могу понять, как активировать и переключать среды anaconda в Dockerfile во время процесса сборки
Вот начальный код:
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
Сначала anaconda в Docker будет жаловаться, что оболочка не настроена должным образом, поэтому после добавления команды 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
Выполнение 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 при интерактивном изменении при запуске контейнера после сборки одинаковы, но я все еще получаю ошибку установки оболочки неправильно.
CommandNotFoundError: Ваша оболочка не была правильно сконфигурирована для использования «активации conda».
Чтобы инициализировать вашу оболочку, запустите
$ conda init
В настоящее время поддерживаются следующие оболочки:
- Баш
- рыба
- тсш
- xonsh
- зш
- PowerShell
Смотрите 'conda init --help' для получения дополнительной информации и опций.
ВАЖНО: Вам может потребоваться закрыть и перезапустить вашу оболочку после запуска 'conda init'.
Почему это не работает ???
Я видел, что может быть обходной путь с использованием шаблона док-станции miniconda, но я не могу использовать это. Как создать и переключить среду anaconda в процессе сборки Docker? Спасибо!