RUN Конда активировать не работает. Он всегда показывает "перезапустите вашу оболочку после запуска 'conda init'", Dockerfile - PullRequest
0 голосов
/ 09 марта 2020

Я собираюсь создать файл cuda & anaconda docker, но после многократных попыток он всегда предупреждает меня об ошибке.

Журнал azure конвейеров.

enter image description here и мой Dockerfile:

FROM rogerchen/simpledet:cuda10 as cuda
WORKDIR /app

ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH /opt/conda/bin:$PATH

RUN apt-get update \
    && apt-get install -y wget git make python3-dev libglib2.0-0 libsm6 libxext6 libxrender-dev python3-pip \
    && apt-get clean

RUN wget --quiet https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh -O ~/anaconda.sh && \
    /bin/bash ~/anaconda.sh -fbp /opt/conda && \
    rm ~/anaconda.sh && \
    ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
    echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
    echo "conda activate base" >> ~/.bashrc

SHELL ["/bin/bash", "-c"]

RUN conda update conda -y

RUN conda create -n simpledet python=3.7  -y
RUN conda init bash
RUN conda activate simpledet
RUN conda install cudatoolkit=10.

Перед 'активировать' есть 'RUN conda init bash'. Надеюсь, ребята, дайте мне несколько советов. Заранее спасибо.

1 Ответ

0 голосов
/ 09 марта 2020

Интерактивный bash

Команда conda activate является функцией bash и загружается только в интерактивных сеансах. DOCKERFILE уже делает эквивалент conda init, то есть, добавляя conda.sh к .bashrc. Однако текущий SHELL /bin/bash -c не загружается .bashrc - для этого обычно требуется флаг -i или -l.

Активация Conda не требуется

Но это все не имеет значения, потому что нет необходимости активировать env с учетом текущего кода. Вместо этого установите все зависимости с самого начала (рекомендуется):

conda create -n simpledet -y python=3.7 cudatoolkit=10.

или хотя бы укажите env:

conda install -n simpledet -y cudatoolkit=10.

Спецификация среды

Если среда требует чем несколько пакетов, или что-то нужно из PyPI, то лучше использовать файл определения среды YAML и создать через него env. Файл примера:

simpledet.yml

name: simpledet
channels:
 - defaults
dependencies:
 - python=3.7
 - cudatoolkit=10.
 - pip
 - pip:
   - mxnet

Затем вы можете создать env с помощью:

COPY simpledet.yml /tmp/simpledet.yml
RUN conda env create -f /tmp/simpledet.yml
...