Docker - Symfony 4 - Doctrine - доступ запрещен пользователю - PullRequest
0 голосов
/ 07 октября 2018

Я начинаю новый проект, используя symfony 4 и Docker.У меня есть 3 контейнера Docker, использующих следующую конфигурацию:

version: "3.1"
services:

    mysql:
      image: mysql:8.0
      container_name: docker-symfony4-mysql
      working_dir: /application
      volumes:
        - .:/application
      environment:
        - MYSQL_ROOT_PASSWORD=dbrootpw
        - MYSQL_DATABASE=docker_symfony4
        - MYSQL_USER=dbuser
        - MYSQL_PASSWORD=dbpw
      ports:
        - "8002:3306"

    webserver:
      image: nginx:alpine
      container_name: docker-symfony4-webserver
      working_dir: /application
      volumes:
          - .:/application
          - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8000:80"

    php-fpm:
      build: phpdocker/php-fpm
      container_name: docker-symfony4-php-fpm
      working_dir: /application
      volumes:
        - .:/application
        - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

Вот содержимое моего файла .env:

APP_ENV=dev
APP_SECRET=b154acc26414736e135b6842c08c70e7
DATABASE_URL=mysql://db_user:db_password@mysql:3306/db_name

И файла doctrine.yaml:

parameters:
       env(DATABASE_URL): ''

doctrine:
    dbal:
        driver: 'pdo_mysql'
        server_version: '5.7'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

   url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

Я могу подключиться из контейнера к MySQL Workbench:

docker exec -it docker-symfony4-mysql bash
mysql -u dbuser  -p 
Enter password: 
Welcome to the MySQL monitor
mysql> Show grants; 
GRANT USAGE ON *.* TO `dbuser`@`%`                          
GRANT ALL PRIVILEGES ON `docker_symfony4`.* TO `dbuser`@`%
mysql>  show databases; 
docker_symfony4 
information_schema

У меня возникает эта проблема, когда я пытаюсь использовать Doctrine:

docker-compose exec php-fpm bash
bin/console doctrine:query:sql "show grants"

Я получаю ошибку:

Error thrown while running command "doctrine:query:sql 'show grants'".
Message: "An exception occurred in driver: SQLSTATE[HY000] [1045] 
Access denied for user 'db_user'@'172.23.0.3' (using password: YES)"

Что я делаю не так?Как я могу это исправить?Любая помощь с благодарностью!

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Итак, это ваш доступ к вашей базе данных:

    environment:
    - MYSQL_ROOT_PASSWORD=dbrootpw
    - MYSQL_DATABASE=docker_symfony4
    - MYSQL_USER=dbuser
    - MYSQL_PASSWORD=dbpw

Но ошибка говорит так:

Access denied for user 'db_user'@'172.23.0.3' (using password: YES)"

Вы видите ошибку?его легко обрабатывать ... ваша строка подключения не верна, вот такие строки, как db_user и db_password, но у вашего const есть другие имена.

вы можете попробовать это, чтобы установить правильное соединение:

Ваш файл .env:

APP_ENV=dev
APP_SECRET=b154acc26414736e135b6842c08c70e7
DB_USER=dbuser
DB_PASSWORD=dbpw
DB_NAME=db_name
DATABASE_URL=mysql://${DB_USER}:${DB_PASSWORD}@mysql/${DB_NAME}

Предупреждение : если ваш пароль содержит специальные символы, не забудьте замаскировать их с encodeURI и экранировать знак% знаком% перед закодированными символами.

0 голосов
/ 08 октября 2018

Это выглядит основной проблемой MySQL.Конечно, вам просто нужно flush_privileges, считая, что хост прав.

...