gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:39:20 31 4
gpt4 key购买 nike

我正在写一个dockerfile,想把“ls”命令的输出放到一个变量中,如下所示:

$file = ls /tmp/dir

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

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

RUN $file = ls /tmp/dir

最佳答案

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

但是,如果您只想捕获 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 输出变量(其中包含在步骤 2 中创建的 file1file2 的列表):

$ 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

关于Dockerfile:将 RUN 指令输出到变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34213837/

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