在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脚本?