Как я могу один раз установить пароль для пользователя базы данных?

#laravel #docker #docker-compose #mariadb

Вопрос:

Я начал новый проект с использованием docker-compose, однако мои миграции и запросы к базе данных выходят из строя с ошибкой Access denied for user 'data-jobs'@'172.18.0.3' (using password: YES)

У меня есть 2 файла конфигурации. .env для моей конфигурации laravel и .db.env для переменных среды моей базы данных. Я получил эту ошибку, потому что я изменил значение в файле .env, но не в файле .db.env.

Мой вопрос заключается в следующем:

Как я могу использовать can I pass MYSQL_PASSWORD и DB_PASSWORD для Laravel и MariaDB, используя только один конфигурационный ключ, чтобы я снова не допустил эту ошибку?

Ответ №1:

Ваши имена переменных env неверны, образ mysql Docker использует разные ключи.

 MYSQL_USER
MYSQL_DATABASE
....
 

https://hub.docker.com/_/mariadb
https://hub.docker.com/_/mysql

(MariaDB в качестве замены для ввода использует те же ключи.)

Если вы хотите использовать свои пользовательские ключи, вам нужно сопоставить их в окне настройки-compose.yml:

 db-data-jobs:
    image: mariadb:10.6
    container_name: db-data-jobs
    restart: unless-stopped
    tty: true
    env_file:
      - .db.env
    volumes:
      - db-data:/var/lib/mysql
      - type: bind
        source: /etc/localtime
        target: /etc/localtime
    ports:
      - '3307:3306'
    networks:
      - app-net
    environment:
      - MYSQL_USER=${DB_USERNAME}
 

https://docs.docker.com/compose/environment-variables/

Убедитесь, что вы не искажаете имена ваших файлов: .env и .db.env .

Комментарии:

1. Привет, спасибо за ответ, вы заставили меня найти ошибку, которая заключалась в том, что мой пароль .db.env не совпадал с тем, что было в .env файле. Однако .db.env-это еще один файл в моем каталоге, специально предназначенный для ключей среды mysql. Чтобы они не были включены в систему управления версиями и могли иметь разные разрешения. Я использую 0660 .

2. Теперь я обновил свой вопрос, чтобы посмотреть, сможем ли мы найти способ предотвратить повторение этой ошибки.

3. @Бен ты полностью изменил свой вопрос. Но на ваш вопрос все равно дан ответ: Используйте сопоставление и/или несколько файлов .env, как описано в docs.docker.com/compose/environment-variables

4. Когда я поставил a - перед переменной окружения в файле компоновки, я получил сообщение об ошибке, что это не строка. Удаление - исправило ошибку, и сервис работает отлично.

5. @Бен ах, вы правы, синтаксис не - MYSQL_USER: ... такой, но - MYSQL_USER=... ! Рад, что это сработало для вас!