Скрипт начинается с Docker Container - PullRequest
1 голос
/ 10 июля 2019

Я хотел бы иметь скрипт для моего проекта, который запускается каждый раз, когда мой контейнер запускается или перезапускается.Сценарий должен запускать в консоли некоторые параметры, такие как схема Console / торт и т. Д. Я использую Cakephp 2.x для моего проекта и докера.

Я попытался в файле докера с CMD oder ENTRYPOINT, но процесс заканчиваетсяесли скрипт закончен.Мой контейнер остановился.

CMD ["/bin/bash", "/starter.sh"]

или

ENTRYPOINT ["/starter.sh"]

или

COPY starter.sh /
RUN chmod +x /starter.sh

С первым и вторым я получаю сценарий, но основной процесс не работает.

С третьей попытки скрипт не запускается, но мой проект запускается.

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Из документации:

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

0 голосов
/ 11 июля 2019

Я думаю, что вы можете проверить RUN и CMD в руководстве. Но я также заметил, что вы сказали, что процесс остановился, когда ваш скрипт завершился. Вы уверены, что ваш сценарий не остановится? Если ваш процесс остановится, то, что бы вы ни делали, контейнер остановится в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...