Я пытался часами и не могу понять, как активировать и переключать среды 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
Выполнение трех команд после создания образа докера работает (т. Е. Выполняется в интерактивном режиме после вызова docker run имя-контейнера), но по какой-то причине не работает при сборке контейнера. Я выяснил, что переменная $ 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 activate. Чтобы инициализировать оболочку, запустите $ conda init В настоящее время поддерживаются следующие оболочки: - bash - fish - tcsh - xonsh - zsh - powershell Дополнительные сведения и параметры см. В 'conda init --help'. ВАЖНО: вам может потребоваться закрыть и перезапустить оболочку после запуска conda init.
Почему это не работает ???
Я видел, что может быть обходной путь с использованием шаблона докера miniconda, но я не могу его использовать. Как мне создать и переключить среду anaconda в процессе сборки Docker? Спасибо!
pip install
в своем Dockerfile, чтобы установить что-то в системный Python (изолированный от образа, который вы создаете). - person David Maze   schedule 09.06.2019RUN conda activate base
наRUN bash -c "conda activate base"
? - person Andrew Li   schedule 18.08.2020