gpt4 book ai didi

docker - 使用 docker run echo 环境变量

转载 作者:行者123 更新时间:2023-12-02 05:45:45 37 4
gpt4 key购买 nike

任何人都可以解释为什么这不起作用:

# 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检查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 在容器启动之前展开。它由您的 shell 扩展,确实是在调用 docker 命令之前。

<小时/>

2) docker run -ti --rm golang echo \$GOPATH

docker run -ti golang echo \$GOPATH
$GOPATH

docker 检查容器 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 接收到文字变量名称而不是其值。

<小时/>

3) docker run -ti --rm golang bash -c "echo \$GOPATH"

docker run -ti golang bash -c "echo \$GOPATH"
/go

docker 检查容器 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在哪里定义的。

关于docker - 使用 docker run echo 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354607/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com