在CMD中使用环境变量


83

我可以在Dockerfile的CMD节中使用环境变量吗?

我想做这样的事情:

CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]

其中$ MEMCACHE_11211_TCP_ *将通过包含docker run命令的--link参数自动设置。用户可以在运行时配置$ ARG,也许可以通过“ -e”参数进行配置?

这似乎对我不起作用,例如,它实际上是通过字符串“ $ ARG”传递的。

Answers:


57

这个答案可能有点晚了。但是,CMD根据您编写参数的方式,对for的环境的解释略有不同。如果CMD以字符串形式(而不是在数组内部)传递,它将作为外壳而不是exec启动。请参阅https://docs.docker.com/engine/reference/builder/#cmd

您可以尝试在CMD不使用数组语法的情况下将其作为外壳程序运行:

CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT


11

两个安迪都说对了。json语法绕过入口点。在他们的示例中使用CMD时,它将被视为默认入口点的参数:/bin/sh -c它将解释环境变量。

在这两种情况下,Docker都不评估CMD中的变量。在前一种情况下,直接调用该命令,因此不会解释任何内容;在后一种情况下,使用解释变量sh


7

我不能给它是如何说话应该工作,但我认为,如果你叫这是一个shell脚本,例如CMD runmyserver.sh,那么该shell变量的解释将被推迟到CMD居然跑。

所以,尝试

myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT`` 

作为shell脚本?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.