即使我已经设置了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
?
答案 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
$HOME
变量,而不是容器的变量。在您的情况下,$FOO
不会在主机上退出,因此会打印一个空行$HOME
(像字符串一样)$HOME
变量您的案例示例:
$ docker run -e FOO=foofoo alpine sh -c 'echo $FOO'
foofoo
感谢@vmonteco指出docker inspect
进行调试。如果您想了解更多有关容器实际执行情况的信息,请参阅下面讨论的3种不同情况的CMD
设置:
"Cmd": ["echo"]
"Cmd": ["echo","$FOO"]
"Cmd": ["sh","-c","echo $FOO"]