#mysql #laravel #docker #docker-compose #mysql-workbench
#mysql #ларавель #docker #docker-создать #mysql-workbench
Вопрос:
Я просмотрел примерно 23.74 учебных пособий по docker-compose для контейнеров laravel и mysql!
Пожалуйста, кто-нибудь может мне объяснить???
Когда я создаю свой файл docker-compose, я создаю контейнер mysql из образа mysql. ЗАТЕМ я должен ввести переменные, которые выглядят следующим образом:
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
В чем разница между этими переменными и переменными, которые я ввожу в .env-файл моего приложения laravel.
ЭТИ:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laradb
DB_USERNAME=root
DB_PASSWORD=secret
В ЧЕМ РАЗНИЦА????
Что делают переменные docker-compose. И что делают эти переменные .env. И почему я настраиваю их дважды?
Причина, по которой я спрашиваю, заключается в том, что всякий раз, когда я следую инструкциям docker по настройке mysql, я могу заставить его работать, только если я использую различные переменные, предоставленные мне учителем?? Это не имеет смысла. Что делать, если я хочу использовать свои собственные значения переменных ??! Как только я пытаюсь использовать свои собственные переменные, база данных прерывается, и я не могу подключиться к ней. Является ли homestead каким-то специальным экземпляром db, предназначенным для laravel? Это не было проблемой, когда я делал все это локально без docker.
Например. Вышеупомянутые переменные docker-compose были использованы для создания контейнера mysql, а затем, когда я подключаюсь к нему с помощью SQL workbench, я вижу схему под названием «homestead». Теперь, что мне делать, если я не хочу, чтобы эта схема называлась homestead, или что, если я хочу добавить другую схему?? Это не позволяет мне??(в разрешении отказано).
Теперь я потратил 3 дня, пытаясь создать пустое приложение laravel, которое подключается к БД в отдельном контейнере, использующем mysql, к которому я могу подключиться через SQL workbench, чтобы увидеть фактическую БД. Я хочу иметь возможность создать имя схемы, которое я хочу использовать в SQL workbench, а затем иметь возможность установить эту схему в качестве имени базы данных в моем файле laravel .env.
Пожалуйста, ПОМОГИТЕ! Вам не нужно решать эту проблему за меня, но не могли бы вы указать мне на какой-нибудь полезный материал, который объясняет это!! Для docker-создайте специально mysql. Не пытайтесь использовать команды std docker в терминале, если это возможно.
Комментарии:
1. вы можете использовать в файле compose
MYSQL_DATABASE: '${.env_vairable_name}'
, подобном этому, вам нужно только ввести .env
Ответ №1:
файл .env против docker-compose.yml environment:
:
У них разные области / приоритет.
Передача переменных среды в пользу MySQL:
Контейнер MySQL ожидает, что эти переменные среды будут существовать и иметь значения.
Аналогично, контейнер Laravel должен иметь возможность взаимодействовать с контейнером MySQL, следовательно, ему нужны совпадающие значения, и именно поэтому происходит перекрытие.
Команда bash printenv
может помочь ужесточить это, поскольку вы можете видеть, какие переменные среды доступны для каких контейнеров ( docker run msql_container_name bash -c 'printenv'
vs docker run laravel_container_name bash -c 'printenv'
).
- https://github.com/reflexions/docker-laravel (в качестве примера)
Вы упомянули, что не возражаете против отправки в ссылки, поэтому я в первую очередь сделал это — но я рад уточнить здесь или в комментариях, если это все еще не имеет смысла / я не рассматриваю основную проблему.