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

我正在编写一个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

以上是 Dockerfile:将RUN指令输出到变量中 的全部内容, 来源链接: utcz.com/qa/418133.html

回到顶部