Docker:无法设置env变量

时间:2018-02-09 09:19:01

标签: docker dockerfile

即使我已经设置了env var FOO,也没有显示出来:

$ docker run -e FOO=foofoo ubuntubr echo $PATH
/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc
$ docker run -e FOO=foofoo ubuntubr echo $FOO
$ 

我做错了什么?

但我能够修改路径:

docker run -e PATH=/nopath ubuntubr echo $PATH
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"echo\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled 

那么为什么docker run -e FOO=foofoo ubuntubr echo $FOO没有打印foofoo

1 个答案:

答案 0 :(得分:5)

设置变量。您尝试验证它们已设置的方式是错误的。

它被称为"变量扩展"我引用了@larsks给出here的答案:

$ docker run -it alpine echo $HOME
/home/lars

$ docker run -it alpine echo '$HOME'
$HOME

$ docker run -it alpine sh -c 'echo $HOME'
/root
  1. 它打印主机的$HOME变量,而不是容器的变量。在您的情况下,$FOO不会在主机上退出,因此会打印一个空行
  2. 打印$HOME(像字符串一样)
  3. 这样可行,并打印容器的$HOME变量
  4. 您的案例示例:

    $ docker run -e FOO=foofoo alpine sh -c 'echo $FOO'
    foofoo
    

    感谢@vmonteco指出docker inspect进行调试。如果您想了解更多有关容器实际执行情况的信息,请参阅下面讨论的3种不同情况的CMD设置:

    1. "Cmd": ["echo"]
    2. "Cmd": ["echo","$FOO"]
    3. "Cmd": ["sh","-c","echo $FOO"]
相关问题