Dockerfile – как выполнить эхо в файл?

Я пытаюсь создать скрипт 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"]

Может быть, проблема с разрешениями? Также попробуйте создать файл локально, а затем сделайте COPY ./scripts/test.sh /scripts/test.sh

Justinas 10.05.2024 10:42

@Justinas, спасибо, но, конечно, копирование с локального компьютера работает нормально, но, к сожалению, это не мое требование, мне нужно иметь скрипт в файле dockerfile.

ojek 10.05.2024 11:10
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
2
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В образе 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"] тоже подойдет :)

Bog 10.05.2024 11:00

Спасибо, но когда я запускаю ваш скрипт, он все равно не работает - я получаю сообщение "exec /scripts/test.sh: нет такого файла или каталога". Что раздражает, так это то, что на этапе сборки, похоже, не сообщается о каких-либо проблемах - даже chmod +x не выводит никаких ошибок (я предполагаю, что если бы файл действительно не существовал, этот chmod вышел бы из строя?)

ojek 10.05.2024 11:09

@ojek Вы можете попробовать использовать ENTRYPOINT [ "/bin/sh", "/scripts/test.sh" ], но у меня это работает как есть.

Turing85 10.05.2024 11:13

Другие вопросы по теме

Невозможно отправить запрос на запуск образа Docker. Ошибка сокета зависает в почтальоне. В браузере localhost не отправлял никаких данных
Docker-compose: создание одного и того же контейнера для разных проектов
Когда я пытаюсь построить Docker, я получаю, что каждый из моих проектов csharp не может вычислить кеш (то есть не может быть найден)
Проблема с определением переменных среды в файле Docker Compose
Ошибка модуля PythonNotFound при запуске в контейнере докеров
Для создания Docker-контейнера с определенной версией компилятора необходимо добавить альтернативы обновления в последнюю строку Dockerfile
Есть ли способ автоматически обновить пользовательский интерфейс с помощью Docker Desktop?
Почему при создании образа для бэкэнда он не может подключиться к MySQL
Получение ошибки «ErrImagePull» при создании объекта развертывания
Возникла проблема после развертывания образа докера net 8 в контейнере веб-приложения Azure (Linux)