Я пытаюсь создать скрипт bash в файле dockerfile, но когда я пытаюсь его запустить, докер говорит, что файл не существует. Что я делаю не так?
FROM alpine
USER root
WORKDIR /
RUN mkdir /scripts
RUN echo '#!/bin/bash\necho "test"' >> /scripts/test.sh
RUN chmod +x /scripts/test.sh
ENTRYPOINT ["/scripts/test.sh"]
@Justinas, спасибо, но, конечно, копирование с локального компьютера работает нормально, но, к сожалению, это не мое требование, мне нужно иметь скрипт в файле dockerfile.


В образе apline не установлен bash, поэтому сценарий скрипта неверен. Кроме того, \n в скрипте будет записан в файл буквально, а не как перенос строки. Поэтому я рекомендую использовать printf вместо echo. Кроме того, мы должны явно вызвать оболочку sh:
FROM alpine
USER root
WORKDIR /
RUN mkdir /scripts
RUN printf '#!/bin/sh\necho "test"' >> /scripts/test.sh
RUN chmod +x /scripts/test.sh
ENTRYPOINT [ "/bin/sh", "/scripts/test.sh" ]
Правильный. Также, если вы хотите сохранить /script/test.sh как есть, ENTRYPOINT ["sh", "/scripts/test.sh"] тоже подойдет :)
Спасибо, но когда я запускаю ваш скрипт, он все равно не работает - я получаю сообщение "exec /scripts/test.sh: нет такого файла или каталога". Что раздражает, так это то, что на этапе сборки, похоже, не сообщается о каких-либо проблемах - даже chmod +x не выводит никаких ошибок (я предполагаю, что если бы файл действительно не существовал, этот chmod вышел бы из строя?)
@ojek Вы можете попробовать использовать ENTRYPOINT [ "/bin/sh", "/scripts/test.sh" ], но у меня это работает как есть.
Может быть, проблема с разрешениями? Также попробуйте создать файл локально, а затем сделайте
COPY ./scripts/test.sh /scripts/test.sh