Как запустить сценарий оболочки инициализации среды из Dockerfile

Я пытаюсь создать API, завернутый в образ докера, который обслуживает модель Openvino. Как мне запустить "setupvars.sh" из самого Dockerfile, чтобы мое приложение могло получить к нему доступ?

Я пробовал запустить сценарий с помощью RUN. Например: RUN / bin / bash setupvars.sh или RUN ./setupvars.sh. Однако ни один из них не работает, и я получаю ModelNotFoundError: нет модуля с именем openvino

RUN $INSTALL_DIR/install_dependencies/install_openvino_dependencies.sh
RUN cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites && sudo ./install_prerequisites_tf.sh
COPY . /app
WORKDIR /app
RUN apt autoremove -y && \
    rm -rf /openvino /var/lib/apt/lists/*
RUN /bin/bash -c "source $INSTALL_DIR/bin/setupvars.sh"
RUN echo "source $INSTALL_DIR/bin/setupvars.sh" >> /root/.bashrc
CMD ["/bin/bash"]
RUN python3 -m pip install opencv-python
RUN python3 test.py

Я хочу, чтобы OpenVino был доступен для моего приложения-пулеметчика, которое будет обслуживать модель в образе докера.


person Nimish Ronghe    schedule 06.06.2019    source источник


Ответы (3)


Следующие команды у меня работают.

ARG OPENVINO_DIR=/opt/intel/computer_vision_sdk


# Unzip the OpenVINO installer
RUN cd ${APP_DIR} && tar -xvzf l_openvino_toolkit*

# installing OpenVINO dependencies
RUN cd ${APP_DIR}/l_openvino_toolkit* && \
    ./install_cv_sdk_dependencies.sh

# installing OpenVINO itself
RUN cd ${APP_DIR}/l_openvino_toolkit* && \
    sed -i 's/decline/accept/g' silent.cfg && \
    ./install.sh --silent silent.cfg

# Setup the OpenVINO environment
RUN /bin/bash -c "source ${OPENVINO_DIR}/bin/setupvars.sh"
person Dmitry    schedule 06.06.2019
comment
У меня все еще не работает. Ошибка получения того же модуля, не найденного - person Nimish Ronghe; 07.06.2019

Вам нужно повторно запускать его каждый раз, когда вы запускаете контейнер, потому что эти переменные предназначены только для сеанса.

Вариант 1. Запустите приложение примерно так:

CMD /bin/bash -c "source /opt/intel/openvino/bin/setupvars.sh && python test.py"

Вариант 2 (не тестировался): добавьте исходную команду в свой .bashrc, чтобы она запускалась каждый раз при запуске.

# Assuming running as root
RUN echo "/bin/bash -c 'source /opt/intel/openvino/bin/setupvars.sh'" >> ~root/.bashrc
CMD python test.py

Для остальной части Dockerfile здесь есть руководство (также не тестировалось и не покрывает вышеперечисленное): https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_docker_linux.html

person Milos Matovic    schedule 26.04.2020

Как упоминалось в двух предыдущих ответах, сценарий setupvars.sh устанавливает переменные среды, необходимые для OpenVINO.

Но вместо того, чтобы запускать это каждый раз, вы можете добавить переменные в свой Dockerfile. Во время написания вашего Dockerfile запустите:

CMD /bin/bash -c "source /opt/intel/openvino/bin/setupvars.sh && printenv"

Это даст вам значения, которые установлены для переменных среды. Вы также можете запустить printenv без установки переменных OpenVINO:

CMD /bin/bash printenv

Сравнение двух выходных данных позволит вам точно определить, что задает сценарий setupvars.sh.

Как только вы узнаете значения, установленные сценарием, вы можете установить их как часть Dockerfile с помощью инструкции ENV. Я не стал бы копировать это, потому что он, скорее всего, зависит от вашей настройки, но в моем случае это выглядело так:

ENV PATH=/opt/intel/openvino/deployment_tools/model_optimizer:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV LD_LIBRARY_PATH=/opt/intel/openvino/opencv/lib:/opt/intel/openvino/deployment_tools/ngraph/lib:/opt/intel/openvino/deployment_tools/inference_engine/external/tbb/lib::/opt/intel/openvino/deployment_tools/inference_engine/external/hddl/lib:/opt/intel/openvino/deployment_tools/inference_engine/external/omp/lib:/opt/intel/openvino/deployment_tools/inference_engine/external/gna/lib:/opt/intel/openvino/deployment_tools/inference_engine/external/mkltiny_lnx/lib:/opt/intel/openvino/deployment_tools/inference_engine/lib/intel64
ENV INTEL_CVSDK_DIR=/opt/intel/openvino
ENV OpenCV_DIR=/opt/intel/openvino/opencv/cmake
ENV TBB_DIR=/opt/intel/openvino/deployment_tools/inference_engine/external/tbb/cmake
# The next one will be whatever your working directory is
ENV PWD=/workspace
ENV InferenceEngine_DIR=/opt/intel/openvino/deployment_tools/inference_engine/share
ENV ngraph_DIR=/opt/intel/openvino/deployment_tools/ngraph/cmake
ENV SHLVL=1
ENV PYTHONPATH=/opt/intel/openvino/python/python3.6:/opt/intel/openvino/python/python3:/opt/intel/openvino/deployment_tools/tools/post_training_optimization_toolkit:/opt/intel/openvino/deployment_tools/open_model_zoo/tools/accuracy_checker:/opt/intel/openvino/deployment_tools/model_optimizer
ENV HDDL_INSTALL_DIR=/opt/intel/openvino/deployment_tools/inference_engine/external/hddl
ENV _=/usr/bin/printenv
person Oscar Schafer    schedule 30.06.2021