在CMD中使用环境变量

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)

  • 如果您使用“CMD string”方法,则当您使用“docker run my-image”时,“Ctrl-C”可能会停止工作,因为 shell 获得中断,而不是由“CMD”启动进程。 (3认同)

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.


And*_*ndy 7

我不能给它是如何说话应该工作,但我认为,如果你叫这是一个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脚本?