ana*_*nik 4 environment-variables docker
谁能解释为什么这行不通:
# docker run -ti --rm golang echo $GOPATH
# docker run -ti --rm golang echo \$GOPATH
$GOPATH
Run Code Online (Sandbox Code Playgroud)
当它起作用时:
# docker run -ti --rm golang bash -c "echo \$GOPATH"
/go
Run Code Online (Sandbox Code Playgroud)
1)
docker run -ti --rm golang echo $GOPATH
docker run -ti golang echo $GOPATH
/Users/me/go
Run Code Online (Sandbox Code Playgroud)
我删除了--rm标记以便能够检查容器。然后,我做了docker inspect container-id:
"Env": [
"no_proxy=*.local, 169.254/16",
"PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOLANG_VERSION=1.8.1",
"GOPATH=/go"
],
"Cmd": [
"echo",
"/Users/me/go"
],
Run Code Online (Sandbox Code Playgroud)
$GOPATH在容器启动之前展开。实际上,它docker是在调用命令之前由您的shell扩展的。
2)
docker run -ti --rm golang echo \$GOPATH
docker run -ti golang echo \$GOPATH
$GOPATH
Run Code Online (Sandbox Code Playgroud)
docker inspect container-id:
"Env": [
"no_proxy=*.local, 169.254/16",
"PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOLANG_VERSION=1.8.1",
"GOPATH=/go"
],
"Cmd": [
"echo",
"$GOPATH"
],
Run Code Online (Sandbox Code Playgroud)
此处$GOPATH是文字字符串,不会被外壳扩展,因为您对进行了转义$,然后echo接收文字var名称而不是其值。
3)
docker run -ti --rm golang bash -c "echo \$GOPATH"
docker run -ti golang bash -c "echo \$GOPATH"
/go
Run Code Online (Sandbox Code Playgroud)
docker inspect container-id:
"Env": [
"no_proxy=*.local, 169.254/16",
"PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOLANG_VERSION=1.8.1",
"GOPATH=/go"
],
"Cmd": [
"bash",
"-c",
"echo $GOPATH"
],
Run Code Online (Sandbox Code Playgroud)
在这里,由于,您的外壳程序也将运行docker而不进行任何变量扩展\$,但是还有另一个外壳程序将捕获它并对其进行扩展:bash可以这样做,但是这次是在容器内部,其中docker提供了GOPATH作为定义的环境变量在golang图片中(GOPATH = / go)。请参阅在其中定义的Dockerfile。
| 归档时间: |
|
| 查看次数: |
1960 次 |
| 最近记录: |