传递环境变量不适用于Docker

Ale*_*lar 3 linux docker

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


Docker文件

FROM ubuntu
ENV USERNAME='david'
CMD echo "username = $USERNAME"
Run Code Online (Sandbox Code Playgroud)

生成并运行命令

docker build . -t enviro
docker run -d enviro
Run Code Online (Sandbox Code Playgroud)

docker ps -a

2a3a69aa7868        enviro              "/bin/sh -c 'echo \"u…"
Run Code Online (Sandbox Code Playgroud)

码头工人日志2a3a69aa7868给出

username = david
Run Code Online (Sandbox Code Playgroud)

以下不起作用


Docker文件

FROM ubuntu
CMD echo "username = $USERNAME"
Run Code Online (Sandbox Code Playgroud)

生成并运行命令

docker build . -t enviro
docker run -d enviro -e USERNAME='david'
Run Code Online (Sandbox Code Playgroud)

在这里,运行命令给出了这一点,

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.
Run Code Online (Sandbox Code Playgroud)

docker ps -a

249cb045c26a        enviro              "-e USERNAME=david"
Run Code Online (Sandbox Code Playgroud)

码头工人日志249cb045c26a什么也没有给出


任何想法,这是怎么回事?为什么不传递环境变量?

Ale*_*lar 9

好,我知道了。代替以下内容,

docker run -d enviro -e USERNAME='david'
Run Code Online (Sandbox Code Playgroud)

一定是这样

docker run -d -e USERNAME='david' enviro 
Run Code Online (Sandbox Code Playgroud)

不知道,为什么docker为什么在映像名称之前需要环境变量。

  • 这是因为映像名称之后的所有内容都作为参数发送到入口点脚本。默认情况下是/ bin / sh -c (3认同)
  • 映像名称应该在最后任何一个:)之前,您可以使用所有选项param (2认同)