在CMD中使用环境variables
我可以在Dockerfile的CMD节中使用环境variables吗?
我想要做这样的事情:
CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]
其中$ MEMCACHE_11211_TCP_ *将通过包含我的docker docker run
命令的–link参数自动设置。 $ ARG可以由用户在运行时configuration,也可以通过“-e”参数来configuration?
这似乎并没有为我工作,似乎字面上通过string“$ ARG”例如。
这个答案可能有点晚了。 但是,根据你如何编写参数, CMD
环境的解释稍有不同。 如果您将CMD
作为string传递(不在数组中),它将作为shell而不是exec来启动。 请参阅https://docs.docker.com/engine/reference/builder/#cmd 。
您可以尝试没有数组语法的CMD
作为shell运行:
CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT
Andys都说得对。 json语法绕过入口点。 当你在他们的例子中使用CMD时,它被认为是默认入口点的参数: /bin/sh -c
将解释环境variables。
在任何情况下,Docker都不会评估CMD中的variables。 在前者中,命令是直接调用的,所以没有任何东西被解释,后来,variables由sh
解释。
CMD ["sh", "-c", "echo ${MY_HOME}"]
在这里从sffits回答。
我不能说它应该如何工作,但是我认为如果你把它叫做shell脚本,例如CMD runmyserver.sh
,那么shellvariables的解释将被推迟到CMD实际运行。
所以,试试吧
myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT``
作为一个shell脚本?