【问题标题】:echo environment variable with docker run使用 docker run 回显环境变量
【发布时间】:2023-03-03 09:26:20
【问题描述】:

谁能解释为什么这不起作用:

# 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 environment-variables


    【解决方案1】:

    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 命令之前由您的shell确实扩展。


    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 是一个文字字符串,不会被shell 扩展,因为您转义了$,然后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 也运行没有变量扩展的 docker,但是还有另一个 shell 会捕获并扩展它:bash 会这样做,但这次是在容器内,其中GOPATH 由 docker 提供,作为在 golang 映像中定义的环境变量 (GOPATH=/go)。请参阅定义的Dockerfile

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 2017-09-21
      相关资源
      最近更新 更多