如何通过Dockerfile中的脚本动态设置环境变量?

黄比萨哥

我通过 Dockerfile 构建我的项目。该项目需要安装Openvino。Openvino 需要通过依赖架构的脚本动态设置一些环境变量。sciprt 是:设置环境变量的脚本

据我了解,Dockerfile 无法将环境变量设置为脚本中的图像。

我如何按照方法解决问题?

我需要设置变量,因为稍后我继续安装查看环境变量的 opencv。

我认为如果我将脚本放在 ~/.bashrc 文件中以在连接到 bash 时设置变量,如果我有任何技巧可以启动 bash 一秒钟,它可以解决我的问题。

其次,我认为构建 openvino 映像,从中创建容器,连接它并通过在容器中手动运行脚本来初始化变量。之后,将容器转换为图像。创建新的 Dockerfile 并通过使用此映像进行后续步骤来继续构建步骤。

Openvino Dockerfile exp 和运行脚本的行

我的 Dockerfile:

FROM ubuntu:18.04

ARG DOWNLOAD_LINK=http://registrationcenter-download.intel.com/akdlm/irc_nas/16612/l_openvino_toolkit_p_2020.2.120.tgz

ENV INSTALLDIR /opt/intel/openvino

# openvino download
RUN curl -LOJ "${DOWNLOAD_LINK}"

# opencv download
RUN wget -O opencv.zip https://github.com/opencv/opencv/archive/4.3.0.zip && \
    wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.3.0.zip

RUN apt-get -y install sudo

# openvino installation
RUN tar -xvzf ./*.tgz && \
    cd l_openvino_toolkit_p_2020.2.120 && \
    sed -i 's/decline/accept/g' silent.cfg && \
    ./install.sh -s silent.cfg && \
    # rm -rf /tmp/* && \
    sudo -E $INSTALLDIR/install_dependencies/install_openvino_dependencies.sh

WORKDIR /home/sa

RUN /bin/bash -c "source /opt/intel/openvino/bin/setupvars.sh" && \
    echo "source /opt/intel/openvino/bin/setupvars.sh" >> /home/sa/.bashrc && \
    echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc && \
    $INSTALLDIR/deployment_tools/model_optimizer/install_prerequisites/install_prerequisites.sh && \
    $INSTALLDIR/deployment_tools/demo/demo_squeezenet_download_convert_run.sh

RUN bash

# opencv installation

RUN unzip opencv.zip && \
    unzip opencv_contrib.zip && \
    # rm opencv.zip opencv_contrib.zip && \
    mv opencv-4.3.0 opencv && \
    mv opencv_contrib-4.3.0 opencv_contrib && \
    cd ./opencv && \
    mkdir build && \
    cd build && \
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_INF_ENGINE=ON -D ENABLE_CXX11=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=OFF -D INSTALL_C_EXAMPLES=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=/home/sa/opencv_contrib/modules -D PYTHON_EXECUTABLE=/usr/bin/python3 -D WIDTH_GTK=ON -D BUILD_TESTS=OFF -D BUILD_DOCS=OFF -D WITH_GSTREAMER=OFF -D WITH_FFMPEG=ON -D BUILD_EXAMPLES=OFF .. && \
    make && \
    make install && \
    ldconfig
大卫迷宫

您需要RUN在使用它的每个命令中以及在容器启动时使 shell 加载该文件

对于启动时间,您可以使用入口点包装脚本:

#!/bin/sh
# Load the script of environment variables
. /opt/intel/openvino/bin/setupvars.sh
# Run the main container command
exec "$@"

然后在 Dockerfile 中,需要在RUN命令中包含环境变量脚本,并将该脚本设为镜像的ENTRYPOINT.

RUN . /opt/intel/openvino/bin/setupvars.sh && \
    /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites/install_prerequisites.sh && \
    /opt/intel/openvino/deployment_tools/demo/demo_squeezenet_download_convert_run.sh

RUN ... && \
    . /opt/intel/openvino/bin/setupvars.sh && \
    cmake ... && \
    make && \
    ...

 COPY entrypoint.sh .
 ENTRYPOINT ["./entrypoint.sh"]
 CMD same as the command you set in the original image

如果您docker exec在容器中调试 shell,它们将看不到这些环境变量,您需要手动重新读取环境变量脚本。如果你习惯docker inspect查看容器的底层细节,它也不会显示环境变量。


看起来该脚本只是设置了几个环境变量(尤其是$LD_LIBRARY_PATH$PYTHONPATH),如果设置为有点冗长的值,您可以使用ENVDockerfile 中的语句设置这些变量。

如果您查看docker build输出,则---> 0123456789ab在每个构建步骤之后都有类似的行这些是您可以使用的有效图像 ID docker run你可以跑

docker run --rm 0123456789ab \
  env \
  | sort > env-a
docker run --rm 0123456789ab \
  sh -c '. /opt/intel/openvino/bin/setupvars.sh && env' \
  | sort > env-b

这将为您提供两个带有环境变量的本地文件,无论是否运行此安装脚本。找出不同之处(例如,使用comm (1)),放在ENV每一行之前,然后将其添加到您的 Dockerfile 中。


你不能真正.bashrc在 Docker 中使用许多常见路径不调用其启动文件:在该文档的语言中,DockerfileRUN命令和docker run指令都不是“交互式 shell”,因此它们不读取点文件,并且通常docker run ... command根本不调用 shell .

您也不需要sudo(您已经以 root 身份运行,交互式密码提示将失败);RUN sh -c是多余的(Docker 自己插入);并且source不是标准的 shell 命令(更喜欢标准的.,它甚至可以在没有 shell 扩展的基于 Alpine 的图像上工作)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Dockerfile 使用脚本设置环境变量

来自分类Dev

如何在脚本化的詹金斯管道中动态设置环境变量?

来自分类Dev

通过脚本设置IIS环境变量

来自分类Dev

通过脚本设置环境变量(PATH等)

来自分类Dev

通过 Typescript 脚本设置环境变量

来自分类Java

如何在春季测试中动态设置环境变量

来自分类Dev

如何从shell脚本设置环境变量

来自分类Java

在ant脚本中设置环境变量

来自分类Python

在python脚本中设置环境变量

来自分类Dev

在TCL脚本中设置环境变量

来自分类Dev

docker compose环境变量未在Dockerfile中设置变量

来自分类Dev

Dockerfile 中的环境变量

来自分类Dev

如何从Dockerfile Shell脚本中的.env文件获取环境变量值?

来自分类Dev

Dockerfile:如何从文件内容设置环境变量

来自分类Dev

如何从docker容器中的文件在dockerfile中设置系统范围的环境变量?

来自分类Dev

通过bash脚本设置系统环境变量?

来自分类Dev

通过 shell 脚本在 windows 中导出/设置环境变量

来自分类Dev

通过python脚本设置外壳环境变量

来自分类Dev

在 RUN 部分 Dockerfile 中设置环境变量

来自分类Dev

Dockerfile:在一行中设置多个环境变量

来自分类Dev

kubernetes不会覆盖Dockerfile中设置的环境变量

来自分类Dev

使用环境变量在Dockerfile中设置容器版本

来自分类Dev

如何通过环境文件设置环境变量

来自分类Dev

如何在Dockerfile中设置.bash_profile环境变量?

来自分类Dev

在通过Windows批处理脚本生成的外壳中设置多个环境变量

来自分类Dev

如何根据Gradle脚本中的环境变量动态编辑Android Manifest文件

来自分类Dev

如何将/ etc / profie中声明的环境变量用于通过monit运行的脚本中?

来自分类Dev

如何为 Powershell 脚本传入或设置环境变量?

来自分类Dev

如何从Tcl脚本设置Windows环境变量

Related 相关文章

  1. 1

    Dockerfile 使用脚本设置环境变量

  2. 2

    如何在脚本化的詹金斯管道中动态设置环境变量?

  3. 3

    通过脚本设置IIS环境变量

  4. 4

    通过脚本设置环境变量(PATH等)

  5. 5

    通过 Typescript 脚本设置环境变量

  6. 6

    如何在春季测试中动态设置环境变量

  7. 7

    如何从shell脚本设置环境变量

  8. 8

    在ant脚本中设置环境变量

  9. 9

    在python脚本中设置环境变量

  10. 10

    在TCL脚本中设置环境变量

  11. 11

    docker compose环境变量未在Dockerfile中设置变量

  12. 12

    Dockerfile 中的环境变量

  13. 13

    如何从Dockerfile Shell脚本中的.env文件获取环境变量值?

  14. 14

    Dockerfile:如何从文件内容设置环境变量

  15. 15

    如何从docker容器中的文件在dockerfile中设置系统范围的环境变量?

  16. 16

    通过bash脚本设置系统环境变量?

  17. 17

    通过 shell 脚本在 windows 中导出/设置环境变量

  18. 18

    通过python脚本设置外壳环境变量

  19. 19

    在 RUN 部分 Dockerfile 中设置环境变量

  20. 20

    Dockerfile:在一行中设置多个环境变量

  21. 21

    kubernetes不会覆盖Dockerfile中设置的环境变量

  22. 22

    使用环境变量在Dockerfile中设置容器版本

  23. 23

    如何通过环境文件设置环境变量

  24. 24

    如何在Dockerfile中设置.bash_profile环境变量?

  25. 25

    在通过Windows批处理脚本生成的外壳中设置多个环境变量

  26. 26

    如何根据Gradle脚本中的环境变量动态编辑Android Manifest文件

  27. 27

    如何将/ etc / profie中声明的环境变量用于通过monit运行的脚本中?

  28. 28

    如何为 Powershell 脚本传入或设置环境变量?

  29. 29

    如何从Tcl脚本设置Windows环境变量

热门标签

归档