Если вы не укажете альтернативную SHELL
, RUN
команды, которые являются пустой строкой, будут заключены в /bin/sh -c
(на Linux). Таким образом, эти две команды эквивалентны:
RUN /path/to/a/script.bash
RUN ["/bin/sh", "-c", "/path/to/a/script.bash"]
То, какая оболочка фактически запускается, является функцией базового образа. Часто это оболочка, реализующая то, что есть в POSIX spe c, и не более того; Образы на основе Alpine вообще не включают более тяжелый GNU Bash, если вы не устанавливаете его явно.
Также обратите внимание, что он отличается от интерпретатора, необходимого для запуска скрипта, который обычно обозначается строка "shebang" #!/bin/sh
в верхней части скрипта. Вы можете RUN
любой скрипт или исполняемый файл таким способом, если он имеет правильное объявление в верхней части файла. Если строки #!
нет вообще, сценарий будет интерпретироваться /bin/sh
из базового образа, который, вероятно, не поддерживает расширения Bash (переменные массива, source
, .. .).