Dockerfile выполняет дополнительные сценарии в точке входа - PullRequest
1 голос
/ 21 марта 2020

Я строю lamp контейнер для разработки из glats / alpine-lamp . Я хочу выполнить некоторые дополнительные команды sql (создать БД и некоторых тестовых пользователей) после загрузки контейнера. Я создал новый init.sh сценарий, который выполняется в качестве точки входа моего Dockerfile, например:

FROM glats/alpine-lamp
ENV MYSQL_ROOT_PASSWORD=password
COPY init.sh /init.sh
RUN chmod u+x /init.sh
ENTRYPOINT ["/init.sh"]

В моем init.sh я выполняю сценарий точки входа родительского контейнера , но поскольку этот сценарий не завершается и не запускается в фоновом режиме, мои добавления никогда не выполняются. Я пробовал несколько разных способов вызова родительского скрипта, включая source entry.sh, /bin/sh /entry.sh и (/entry.sh). Я также попытался отправить его в фоновый режим, используя /entry.sh &, хотя это тоже не сработало.

Как правильно добавить дополнительные сценарии точки входа в контейнер, когда родительский сценарий не завершается?

РЕДАКТИРОВАТЬ: мой сценарий инициализации

#!/bin/sh
#run the parent container's entry script
/entry.sh &

# now run the rest of the stuff that needs to happen
mysql -u root -ppassword -e "CREATE DATABASE IF NOT EXISTS mydatabase"

1 Ответ

1 голос
/ 21 марта 2020

Я думаю, основываясь на том факте, что после запуска mysql есть другие способы запуска начальных запросов, вы должны попытаться подойти к этому с другой стороны. Например, вы можете использовать тома, чтобы установить ./conf/docker-entrypoint-initdb.d что-то вроде того, что этот показывает

РЕДАКТИРОВАТЬ: вы также можете поместить sh файлы в каталог, это не только. sql файлов. Они выполнены в алфавитном порядке. Есть лучшее объяснение здесь и здесь

...