您无法保存变量以供以后在其他Dockerfile
命令中使用(如果这是您的意图).这是因为每个都RUN
发生在一个新的shell中.
但是,如果您只想捕获输出,则ls
应该能够在一个RUN
复合命令中执行此操作.例如:
RUN file="$(ls -1 /tmp/dir)" && echo $file
或者只使用子shell内联:
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 中的列表file1
和file2
创建):
$ 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