使用Docker传递环境变量无效

32

我正在学习如何将环境变量传递给Docker容器。虽然以下内容可以正常工作,


Dockerfile

FROM ubuntu
ENV USERNAME='david'
CMD echo "username = $USERNAME"

构建和运行命令

docker build . -t enviro
docker run -d enviro

docker ps -a 命令显示

2a3a69aa7868        enviro              "/bin/sh -c 'echo \"u…"

docker logs 2a3a69aa7868会返回以下内容:

username = david

以下内容无效。 Dockerfile
FROM ubuntu
CMD echo "username = $USERNAME"

构建和运行命令

docker build . -t enviro
docker run -d enviro -e USERNAME='david'

在这里,运行命令会得到以下结果:

docker: Error response from daemon: OCI runtime create failed: 
  container_linux.go:348: starting container process caused "exec: \"-e\": 
  executable file not found in $PATH": unknown.

当执行docker ps -a命令时,将会显示以下内容:
249cb045c26a        enviro              "-e USERNAME=david"

docker logs 249cb045c26a没有输出


有任何想法,这里发生了什么?为什么环境变量没有被传递?

1个回答

92

好的,我明白了。与其使用以下内容,

docker run -d enviro -e USERNAME='david'

必须像这样

docker run -d -e USERNAME='david' enviro 

不知道为什么Docker要在镜像名称之前要求环境变量。


24
这是因为图像名称后面的所有内容都会作为参数发送到入口脚本。默认情况下,入口脚本是/bin/sh -c。 - Tim Schruben
哥们,我一直对这个问题很好奇呢。你的回答真是太棒了,简直就是金点子。 - Aleksandar Angelov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接