Docker составляет переменные среды mysql по сравнению с переменными базы данных Application .env. В значительной степени запутан

#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' ).

Вы упомянули, что не возражаете против отправки в ссылки, поэтому я в первую очередь сделал это — но я рад уточнить здесь или в комментариях, если это все еще не имеет смысла / я не рассматриваю основную проблему.