@Glowinthedark
systems engineer

Как я могу выполнить script.sql в контейнере???

У меня есть проект LAMP и я пытаюсь запустить его в Docker compose. Приложение работает, но не имеет связи с mysql. Причина: sql файл не выполняется и база данных не создается. Когда я захожу в контейнер и вручную запускаю файл sql,то все потом работает хорошо.

FROM mysql:5.7.17
ENV MYSQL_ROOT_PASSWORD password123
COPY script.sql /docker-entrypoint-initdb.d/
RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/
EXPOSE 3306
CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]


Как я могу выполнить script.sql в контейнере??? Как правильно написать Dockerfile.
  • Вопрос задан
  • 190 просмотров
Решения вопроса 1
karabanov
@karabanov
Системный администратор
Сложна. Нет смысла кастомизирвоать образ, достаточно подмонитровать директорию с script.sql в docker-entrypoint-initdb.d:

volumes: 
    - ./init:/docker-entrypoint-initdb.d

Если в том скрипте с нуля база данных создаётся, то надо не забыть и пользователя создать и грантов ему дать и переключиться на эту базу с помощью команды use <db_name> (где <db_name> свежесозданная база данных), ну а дальше собственно список запросов. И да, это всё не мгновенно происходит - надо предусмотреть в приложении проверку, что база полностью поднялась, задержку какую нибудь придумать...

CMD тоже нет смысла использовать - эти флаги можно передать из docker-compose.yml с помощью директивы command

command:
    - --character-set-server=utf8mb4
    - --collation-server=utf8mb4_unicode_ci
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы