我正在尝试对运行nodeJS的Dockerfile进行参数化,以便可以在docker run
上自定义入口点命令的args,以便可以维护一个容器工件,该容器工件可以随某些运行时args的变化而重复部署。 >
我尝试了几种不同的方法,最基本的是
ENV CONFIG_FILE=default.config.js
ENTRYPOINT node ... --config ${CONFIG_FILE}
我发现的是,即使我使用docker run
传递新值,默认值也仍保留在-e
命令中。如
docker run -e CONFIG_FILE=desired.config.js
我尝试过的另一种Dockerfile形式是:
ENTRYPOINT node ... --config ${CONFIG_FILE:-default.config.js}
不使用ENV
指令来指定环境变量,而是使用bash扩展来指定默认值(如果发现不存在或为null)。虽然这给了我相同的行为。
最后,我最后尝试做的是创建一个包含相同入口点命令的bash脚本文件,然后将其ADD
移至docker上下文并在我的ENTRYPOINT
中对其进行调用。而且这似乎也产生了相同的行为。
我正在尝试的可能吗?
编辑:
这是一个最小的dockerfile,可以为我重现此行为:
FROM alpine
ENV CONFIG "no"
ENTRYPOINT echo "CONFIG=${CONFIG}"
这是构建命令:
docker build -f test.Dockerfile -t test .
这是运行命令,尽管有no
arg,它仍会回显-e
:
docker run -t test -e CONFIG=yes
一些其他详细信息,
我正在使用OSX sierra
的Docker版本运行18.09.2, build 6247962