作者:依然2502927101 | 来源:互联网 | 2022-12-28 18:53
即使我已经设置了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> tgogos..:
变量已设置.您尝试验证它们已设置的方式是错误的.
它被称为"变量扩展",我引用@larsks在这里给出的答案:
$ 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
进行调试.如果您想了解有关容器实际执行情况的更多信息,请CMD
参阅前面讨论的3种不同情况的设置:
"Cmd": ["echo"]
"Cmd": ["echo","$FOO"]
"Cmd": ["sh","-c","echo $FOO"]