任何人都可以解釋爲什麼這不起作用:回聲環境變量
# 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'圖像。如果我理解正確,它不是默認設置。 –