bro*_*s94 73 environment-variables docker
我可以在Dockerfile中的CMD节中使用环境变量吗?
我想做这样的事情:
CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]
Run Code Online (Sandbox Code Playgroud)
其中$ MEMCACHE_11211_TCP_*将通过包含我的docker run命令的--link参数自动设置.用户可以在运行时配置$ ARG,可能是"-e"参数?
这对我来说似乎不起作用,例如,它似乎字面上通过字符串"$ ARG".
And*_*inn 49
这个答案可能有点晚了.但是环境的CMD解释会略有不同,具体取决于您如何编写参数.如果你传递CMD一个字符串(不在数组中),它将作为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
Run Code Online (Sandbox Code Playgroud)
Ale*_*nen 23
CMD ["sh", "-c", "echo ${MY_HOME}"]
Run Code Online (Sandbox Code Playgroud)
从这里的 sffits回答.
cre*_*ack 11
安迪都是对的.json语法绕过入口点.当您在示例中使用CMD时,它被视为默认入口点的参数:/bin/sh -c它将解释环境变量.
在任何一种情况下,Docker都不会评估CMD中的变量.在前者中,命令被直接调用,因此没有任何东西被解释,在后面,变量被解释sh.
我不能给它是如何说话应该工作,但我认为,如果你叫这是一个shell脚本,例如CMD runmyserver.sh,那么该shell变量的解释将被推迟到CMD居然跑.
所以,试试吧
myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT``
Run Code Online (Sandbox Code Playgroud)
作为shell脚本?
| 归档时间: |
|
| 查看次数: |
42173 次 |
| 最近记录: |