2
A
答えて
2
1)
docker run -ti --rm golang echo $GOPATH
docker run -ti golang echo $GOPATH
/Users/me/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": [
"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"
],
、あなたのシェルが原因\$
に、あまりにもいない変数の展開とのドッキングウィンドウを実行しますが、そこにありますそれをキャッチして展開する別のシェル:bash
はこれを行いますが、今度はgolang
イメージ(GOPATH =/go)で定義された環境変数としてGOPATHがdockerによって提供されています。それが定義されているDockerfileを参照してください。
また、 '' Entrypoint ':null、 '' golang'画像について説明するのに役立ちます。私が正しく理解していれば、デフォルト設定ではありません。 –