程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Docker构建过程中使用环境变量来获取脚本?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在Docker构建过程中使用环境变量来获取脚本??

开发过程中遇到如何在Docker构建过程中使用环境变量来获取脚本?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在Docker构建过程中使用环境变量来获取脚本?的解决方法建议,希望对你解决如何在Docker构建过程中使用环境变量来获取脚本?有所启发或帮助;

每个DockerfileRUN步骤都运行一个新的容器和一个新的sHell。如果尝试在一个sHell中设置环境变量,则以后将看不到该变量。例如,您可以尝试以下Dockerfile:

FROM busyBox
ENV FOO=foo1
RUN export FOO=foo2
RUN export bar=bar
CMD echo FOO is $FOO, bar is $bar
# Prints "FOO is foo1, bar is "

有三个好的解决方案。从最容易/最好到最难/最复杂:

  1. 将软件安装到“系统”位置,例如/usr; 无论如何,它将被隔离在Docker映像中。(不要使用其他隔离工具(例如python虚拟环境)或版本管理器(例如nvmrvm;),只需安装所需的特定工具即可。

  2. 起作用:

        FROM busyBox
    ENV FOO=foo2
    ENV bar=bar
    CMD echo FOO is $FOO, bar is $bar
    # Prints "FOO is foo2, bar is bar"
  1. 通常看起来像:
        #!/bin/sh
    # Read in the file of environment setTings
    . /opt/wherever/env
    # Then run the CMD
    exec "$@"

copY将此脚本放入您的Dockerfile中。使之成为ENTRYPOINT; 使它CMD成为您实际正在运行的东西。

        FROM busyBox
    workdir /app
    copY entrypoint.sh .
    copY more_stuff .
    ENTRYPOINT ["/app/entrypoint.sh"]
    CMD ["/app/more_stuff/my_app"]

如果你关心这样的事情,环境变量,你通过这种方式设置将不可见docker inspectdocker exec调试环境; 但是,如果您dockerrun-it...sh将它们可见。这是一个有用且足够重要的模式,CMD除非我专门尝试进行此类初次设置,否则我几乎总是在Dockerfile中使用它。

解决方法

我正在创建具有类似以下docker项目的问题的映像:

Docker文件

FROM alpine:3.9.3

COPY ./env.sh /env.sh
RUN @R_262_9016@e /env.sh
CMD env

env.sh

TEST=test123

我用

docker build -t sandbox .

并运行它

docker run --rm sandbox

输出是

HOSTNAME=72405c43801b
SHLVL=1
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

我的环境变量丢失。

在实际的项目中,我必须为安装IBM@H_801_103@ DB2客户机的源程序提供一个较长的复杂脚本,该脚本还设置了环境变量。如何在不阅读整个安装过程并ENV在dockerfile中设置所有变量的情况下实现它?

编辑:在实际项目中,文件env.sh是在@R_111_9382@创建的,并且不能从容器外部使用。根据在其上执行的系统来设置环境变量。如果我在主机上运行它将在来宾中设置错误的变量。

真实脚本的一部分是

if [ -f ${INST_DIR?}/tools/clpplus.jar ]; then
    AddRemoveString CLASSPATH ${INST_DIR?}/tools/clpplus.jar a
fi

if [ -f ${INST_DIR?}/tools/antlr-3.2.jar ]; then
    AddRemoveString CLASSPATH ${INST_DIR?}/tools/antlr-3.2.jar a
fi

if [ -f ${INST_DIR?}/tools/jline-0.9.93.jar ]; then
    AddRemoveString CLASSPATH ${INST_DIR?}/tools/jline-0.9.93.jar a
fi

if [ -f ${INST_DIR?}/java/db2jcc.jar ]; then
    AddRemoveString CLASSPATH ${INST_DIR?}/java/db2jcc.jar a
fi

if [ -f ${INST_DIR?}/java/db2jcc_license_cisuz.jar ]; then
    AddRemoveString CLASSPATH ${INST_DIR?}/java/db2jcc_license_cisuz.jar a
fi

它检查安装并根据此设置变量。由于在主机上没有安装DB2,因此不会设置变量。

大佬总结

以上是大佬教程为你收集整理的如何在Docker构建过程中使用环境变量来获取脚本?全部内容,希望文章能够帮你解决如何在Docker构建过程中使用环境变量来获取脚本?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。