Ответ 1
Вы не можете сохранить переменную для последующего использования в других командах Dockerfile
(если это ваше намерение). Это потому, что каждый RUN
происходит в новой оболочке.
Однако, если вы просто хотите захватить вывод команды ls
вы можете сделать это с помощью одной составной команды RUN
. Например:
RUN file="$(ls -1 /tmp/dir)" && echo $file
Или просто используя subshell inline:
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, выведите переменную (которая содержит список file1
и file2
на шаге 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