我正在编写一个 dockerfile 并希望将“ls”命令的输出放入一个变量中,如下所示:
$file = ls /tmp/dir
这里,“dir”里面只有一个文件。
dockerfile 中的以下 RUN 指令不起作用
RUN $file = ls /tmp/dir
原文由 meallhour 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在编写一个 dockerfile 并希望将“ls”命令的输出放入一个变量中,如下所示:
$file = ls /tmp/dir
这里,“dir”里面只有一个文件。
dockerfile 中的以下 RUN 指令不起作用
RUN $file = ls /tmp/dir
原文由 meallhour 发布,翻译遵循 CC BY-SA 4.0 许可协议
只需突出评论中给出的答案,如果您使用的是现代版本的 Docker(在我的情况下为 v20.10.5)并且日志不显示预期的输出,例如,当您运行时,这可能是正确的答案 RUN ls
。
您应该在 docker build
命令中使用选项 --progress string
:
--progress string Set type of progress output (auto, plain, tty). Use plain to show container output
(default "auto")
例如:
docker build --progress=plain .
在最新版本的docker中,docker自带的经典构建引擎已经升级为Builtkit,显示不同的信息。
您应该看到如下输出:
#12 [8/8] RUN ls -alh
#12 sha256:a8cf7b9a7b1f3dc25e3a97700d4cc3d3794862437a5fe2e39683ab229474746c
#12 0.174 total 184K
#12 0.174 drwxr-xr-x 1 root root 4.0K Mar 28 19:37 .
#12 0.174 drwxr-xr-x 1 root root 4.0K Mar 28 19:35 ..
#12 0.174 drwxr-xr-x 374 root root 12.0K Mar 28 19:37 node_modules
#12 0.174 -rw-r--r-- 1 root root 1.1K Mar 28 19:36 package.json
#12 0.174 -rw-r--r-- 1 root root 614 Mar 28 15:48 server.js
#12 0.174 -rw-r--r-- 1 root root 149.5K Mar 28 16:54 yarn.lock
#12 DONE 0.2s
相关问题 有更多细节。
原文由 Pablo EM 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答2.4k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.6k 阅读
2 回答1.2k 阅读
1 回答958 阅读
您不能保存变量以供以后在其他
Dockerfile
命令中使用(如果这是您的意图)。这是因为每个RUN
都发生在一个新的 shell 中。但是,如果您只想捕获
ls
的输出,您应该可以在一个RUN
复合命令中完成。例如:或者只是使用 subshell 内联:
希望这有助于您的理解。如果您有实际的错误或问题要解决,我可以对此进行扩展,而不是假设的答案。
一个完整的例子
Dockerfile
证明这将是:构建时,您应该看到步骤 3 和 4 输出变量(其中包含
file1
和file2
在步骤 2 中创建的列表):