Dockerfile:将 RUN 指令输出到变量中

新手上路,请多包涵

我正在编写一个 dockerfile 并希望将“ls”命令的输出放入一个变量中,如下所示:

 $file = ls /tmp/dir

这里,“dir”里面只有一个文件。

dockerfile 中的以下 RUN 指令不起作用

RUN $file = ls /tmp/dir

原文由 meallhour 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

您不能保存变量以供以后在其他 Dockerfile 命令中使用(如果这是您的意图)。这是因为每个 RUN 都发生在一个新的 shell 中。

但是,如果您只想捕获 ls 的输出,您应该可以在一个 RUN 复合命令中完成。例如:

 RUN file="$(ls -1 /tmp/dir)" && echo $file

或者只是使用 subshell 内联:

 RUN echo $(ls -1 /tmp/dir)

希望这有助于您的理解。如果您有实际的错误或问题要解决,我可以对此进行扩展,而不是假设的答案。

一个完整的例子 Dockerfile 证明这将是:

 FROM alpine:3.7
RUN mkdir -p /tmp/dir && touch /tmp/dir/file1 /tmp//dir/file2
RUN file="$(ls -1 /tmp/dir)" && echo $file
RUN echo $(ls -1 /tmp/dir)

构建时,您应该看到步骤 3 和 4 输出变量(其中包含 file1file2 在步骤 2 中创建的列表):

 $ docker build --no-cache -t test .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM alpine:3.7
 ---> 3fd9065eaf02
Step 2/4 : RUN mkdir -p /tmp/dir && touch /tmp/dir/file1 /tmp//dir/file2
 ---> Running in abb2fe683e82
Removing intermediate container abb2fe683e82
 ---> 2f6dfca9385c
Step 3/4 : RUN file="$(ls -1 /tmp/dir)" && echo $file
 ---> Running in 060a285e3d8a
file1 file2
Removing intermediate container 060a285e3d8a
 ---> 2e4cc2873b8c
Step 4/4 : RUN echo $(ls -1 /tmp/dir)
 ---> Running in 528fc5d6c721
file1 file2
Removing intermediate container 528fc5d6c721
 ---> 1be7c54e1f29
Successfully built 1be7c54e1f29
Successfully tagged test:latest

原文由 Andy Shinn 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题