Из документации:
ENTRYPOINT позволяет настроить контейнер, который будет работать как исполняемый файл.
А также для CMD:
Основной целью CMD является предоставление значений по умолчанию для исполняющего контейнера.Эти значения по умолчанию могут включать исполняемый файл или могут не включать исполняемый файл, и в этом случае вы также должны указать инструкцию ENTRYPOINT.
Таким образом, они используются для основного исполняемого файла.Итак, ваша третья попытка была в правильном направлении, вы забыли только один важный шаг: выполнение сценария после выполнения его с помощью chmod +x
Если вы включите другой оператор RUN, например:
RUN /starter.sh
ваш скрипт будет работать
Обратите внимание на то, что говорится в документации RUN
:
Инструкция RUN выполнит любые команды в новом слое поверх текущего изображения и зафиксируетРезультаты.Полученное в результате зафиксированное изображение будет использовано для следующего шага в Dockerfile.
Это означает, что оно будет кэшировать результаты Run, если docker не увидит результаты как отличающиеся, что означает, что только сценарийзапускается всякий раз, когда изображение создается в первый раз или каждый раз, когда меняется ваш скрипт.Скорее всего, это то поведение, которое вам нужно в любом случае, но вы можете запустить его без этого поведения кэширования:
Кэш для инструкций RUN не аннулируется автоматически при следующей сборке.Кеш для такой инструкции, как RUN apt-get dist-upgrade -y, будет повторно использован во время следующей сборки.Кэш для инструкций RUN может быть аннулирован с помощью флага --no-cache, например, сборка докера --no-cache.
Я также предлагаю ознакомиться с лучшими практиками для RUN
заявление: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run