代码之家  ›  专栏  ›  技术社区  ›  Julian

Docker环境变量可以用作动态入口点运行时参数吗?

  •  0
  • Julian  · 技术社区  · 6 年前

    我正在尝试参数化运行nodeJS的Dockerfile,以便可以在上自定义entrypoint命令的参数 docker run 因此,我可以维护一个容器工件,可以对一些运行时参数进行重复部署。

    我试过几种不同的方法,最基本的是

    ENV CONFIG_FILE=default.config.js
    
    ENTRYPOINT node ... --config ${CONFIG_FILE}
    

    我发现不管默认值是什么,都会保留在我的 码头工人赛跑 即使我使用 -e 传递新的价值观。例如

    docker run -e CONFIG_FILE=desired.config.js
    

    我尝试过的另一种Dockerfile形式是:

    ENTRYPOINT node ... --config ${CONFIG_FILE:-default.config.js}
    

    不使用 ENV 指令,但如果发现不存在或为null,则使用bash扩展指定默认值。这让我有了同样的行为。

    最后,我尝试的最后一件事是创建一个包含相同entrypoint命令的bash脚本文件,然后 ADD 它将连接到docker上下文,并在我的 ENTRYPOINT .这似乎也给出了同样的行为。

    我所尝试的是可能的吗?

    编辑:

    下面是一个最小的dockerfile,它为我重现了这种行为:

    FROM alpine
    
    ENV CONFIG "no"
    
    ENTRYPOINT  echo "CONFIG=${CONFIG}"
    

    以下是build命令:

    docker build -f test.Dockerfile -t test .
    

    下面是run命令,它会发出回声 no 尽管 -e arg:

    docker run -t test -e CONFIG=yes
    

    一些额外的细节, 我在跑步 OSX sierra 用Docker版本的 18.09.2, build 6247962

    0 回复  |  直到 6 年前