当前位置: 首页 > 面试题库 >

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

宇文良骏
2023-03-14
问题内容

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

$file = ls /tmp/dir

在此,“ dir”内部只有一个文件。

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

RUN $file = ls /tmp/dir

问题答案:

您不能保存变量供以后在其他Dockerfile命令中使用(如果您打算这样做)。这是因为每种RUN情况都发生在新的外壳中。

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

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

或者只是使用subshel​​l内联:

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


 类似资料:
  • 我已经导出了变量,以确保即使在shell的新实例中,变量也会被持久化,但它不起作用。。。我不知道该怎么做。我做了大量的研究和测试,没有得出结论。 Dockerfile: 确保每次运行

  • 问题内容: 我想在我的ipython Notebook中运行bash脚本,并将输出另存为python变量中的字符串,以进行进一步操作。基本上,我想将bash magic的输出传递给一个变量,例如,类似这样的输出: 问题答案: 怎么使用这个: 而不是魔术?使用该符号将以下命令作为shell命令运行,结果全部存储在中。要运行多个命令并收集所有命令的输出,只需组合一个快速的shell脚本即可。

  • 问题内容: 我必须找到具有选定权限的文件,并列出它们及其编号。因此,我想将命令的结果传递给shell和下一个命令,该输出我想存储在变量中,以便以后可以很好地显示。我想吃点东西 但部分无效。请帮忙。 编辑 我知道我可以将命令的整个输出放到像这样的变量中 但是然后我只需要的结果。我如何从该变量中获得该数字?是否可以按相反的顺序显示它,先显示编号,然后显示列表? 问题答案: 复制到TTY(不是标准输出!

  • 问题内容: 我在JavaScript中有以下代码: PHP代码:- 注意:我不希望在表单提交中使用它。我在JavaScript中有一些逻辑,我想在同一PHP页面中使用它…请让我知道我该怎么做。 问题答案: 您必须记住,如果JS和PHP位于同一个文档中,则将首先在服务器上执行PHP,然后在浏览器上执行JS,并且两者将永远不会交互(除非您在哪里用PHP输出JS,这实际上不是两个引擎之间的交互)。 考虑

  • 问题内容: 我正在尝试将命令输出重定向到变量: 然后阅读: 运行它时,输出如下: 但是变量保持空白。对于其他命令,我已经尝试过相同的方法,并且一切正常。 这会将文件列表写入变量,以便以后可以读取。我应该怎么做才能使其正常工作? 问题答案: 也许输出去了,不是吗? 尝试这个:

  • 我在docker文档上读到了如何使用ONBUILD指令,但一点也不清楚。 有人能给我解释一下吗?