任何人都可以解释为什么这不起作用:回声环境变量
# docker run -ti --rm golang echo $GOPATH
# docker run -ti --rm golang echo \$GOPATH
$GOPATH
当这个作品:
# docker run -ti --rm golang bash -c "echo \$GOPATH"
/go
任何人都可以解释为什么这不起作用:回声环境变量
# docker run -ti --rm golang echo $GOPATH
# docker run -ti --rm golang echo \$GOPATH
$GOPATH
当这个作品:
# docker run -ti --rm golang bash -c "echo \$GOPATH"
/go
1)
docker run -ti --rm golang echo $GOPATH
docker run -ti golang echo $GOPATH
/Users/me/go
我删除了--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"
],
$GOPATH
之前容器开始扩大。在调用docker
命令之前,它已被您的外壳扩展,确实为。
2)
docker run -ti --rm golang echo \$GOPATH
docker run -ti golang echo \$GOPATH
$GOPATH
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"
],
这里$GOPATH
是字符串,并没有得到由外壳,因为你躲过了扩大$
,然后echo
接收文字var名称而不是其值。
3)
docker run -ti --rm golang bash -c "echo \$GOPATH"
docker run -ti golang bash -c "echo \$GOPATH"
/go
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"
],
在这里,你的shell中运行,没有变扩建码头工人也因\$
,但有另一个可以捕获并扩展它的shell:bash
将会这样做,但这次是在容器内部,其中GOPATH由docker提供,作为golang
图像(GOPATH =/go)中定义的环境变量。请参阅Dockerfile定义的位置。
它也将有助于在2''入口点'中解释:null,'golang'图像。如果我理解正确,它不是默认设置。 –