【发布时间】:2020-02-22 08:49:06
【问题描述】:
更新:该命令不是有效的 JSON。 Docker 在检测到有效的 JSON 数组时将使用 RUN 的“执行形式”,否则如果检测到无效的 JSON 则回退到使用 RUN 的“shell 形式”。
["bash", "-c", "bash -c 'echo SHLVL: \$SHLVL'"] << \$ is illegal JSON!
但是如果我添加一个额外的\,那么 Bash 将不会在 SHLVL 上进行变量扩展。相反,它打印SHLVL: $SHLVL。详情见https://github.com/moby/moby/issues/40140#issuecomment-546638065
嵌套的 bash 实例递增 SHLVL 环境变量 (http://tldp.org/LDP/abs/html/internalvariables.html)。
例如:
$ echo $SHLVL
1
$ bash -c "echo \$SHLVL"
2
$ bash -c "bash -c 'echo \$SHLVL'"
3
我正在尝试在我的 Dockerfile 中执行相同的命令,但我收到了一个错误(在我的 Github 操作中查看此内容https://github.com/dgroomes/docker-shell-example/commit/20ee36e913729b7cbf7f0e46ffebf359af5cf1a9/checks?check_suite_id=282718710#step:6:20)。
Step 3/3 : RUN ["bash", "-c", "bash -c 'echo SHLVL: \$SHLVL'"]
---> Running in 2255c65b43c9
/bin/sh: 1: [bash,: not found
是不是Dockerfile+Bash组合的字符转义问题?
【问题讨论】:
-
我无法使用您在 Debian 10 上发布的代码重现此问题,而且我什至得到了 14 个步骤,而不是您看到的 15 个步骤。特别是对于
Step 11/14 : RUN bash -c echo SHLVL: $SHLVL,我得到的是SHLVL: 1,而不是你的错误 -
@thatotherguy 感谢您的试用!我已经减少了我的回购中的例子,我已经减少了我的问题。你能再试一次吗?
-
我还打开了一个问题github.com/moby/moby/issues/40140。我尝试了很多转义和无解析的组合。
-
还将这个问题的“SHVLL”部分分离成另一个问题stackoverflow.com/questions/58573830/…
标签: bash docker dockerfile