Подтвердить что ты не робот

Запустите script в файле Dockerfile

Я пытаюсь запустить script во время моего процесса создания в моем файле Docker. Но, похоже, это не работает.

Я пробовал вот так:

FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]

Также так:

FROM php:7-fpm    
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"

И также bu, выполняющий мой запущенный контейнер:

docker exec symfony /bin/bash -c "/bootstrap.sh"

Кажется, что ничего не работает.

Вы знаете, как это сделать?

4b9b3361

Ответ 1

RUN и ENTRYPOINT - два разных способа выполнить script.

RUN означает, что он создает промежуточный контейнер, запускает script и блокирует новое состояние этого контейнера в новом промежуточном изображении. После этого script не будет запущен: ваше окончательное изображение должно отражать результат этого script.

ENTRYPOINT означает, что ваше изображение (которое еще не выполнило script) создаст контейнер и запустит script.

В обоих случаях необходимо добавить script, а RUN chmod +x /bootstarp.sh - хорошая идея.

Он также должен начинаться с shebang (например, #!/bin/sh)

Учитывая ваш script (KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh: несколько команд git config --global), было бы лучше RUN, чтобы script один раз в вашем файле Dockerfile, но убедитесь, что вы используете нужного пользователя (глобальный конфигурационный файл git равен% HOME%/. gitconfig, который по умолчанию является корневым)

Добавьте в ваш файл Docker:

RUN /bootstart.sh

Затем при запуске контейнера проверьте содержимое /root/.gitconfig, чтобы подтвердить выполнение script.

Ответ 2

Попробуйте создать script с помощью команды ADD и спецификации рабочего каталога Подобно этому ( "script" - это имя script и /root/script.sh, где вы хотите его в контейнере, это может быть другой путь:

ADD script.sh /root/script.sh

В этом случае ADD должен пройти до CMD, если у вас есть один Кстати, это классный способ импортировать скрипты в любое место в контейнере с главной машины.

В CMD поместите [./script]

Он должен автоматически выполнить ваш script

Вы также можете указать WORKDIR как /root, тогда вы будете автоматически размещены в корне, после запуска контейнера