Symfony 4 Doctrine не может подключиться к Docker MySQL

Symfony не может подключиться к базе данных, даже если я могу сделать это с теми же учетными данными, используя PMA.

docker-compose.yml:

version: '3'
services:
apache:
    build: .docker/apache
    container_name: sf4_apache
    ports:
      - 80:80
    volumes:
      - .docker/config/vhosts:/etc/apache2/sites-enabled
      - .:/home/wwwroot/sf4
    depends_on:
      - php

mysql:
  image: mysql
  command: "--default-authentication-plugin=mysql_native_password"
  container_name: sf4_mysql
  restart: always
  volumes:
    - ./data/db/mysql:/var/lib/mysql
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: sf4
    MYSQL_USER: sf4
    MYSQL_PASSWORD: sf4

php:
    build: .docker/php
    container_name: sf4_php
    volumes:
      - .:/home/wwwroot/sf4
    environment:
      - maildev_host=sf4_maildev
    depends_on:
      - maildev
      - mysql
    links:
      - mysql

phpmyadmin:
  image: phpmyadmin/phpmyadmin
  container_name: sf4_phpmyadmin
  environment:
    PMA_HOST: mysql
    PMA_PORT: 3306
  ports:
    - 8080:80
  links:
    - mysql

maildev:
    image: djfarrelly/maildev
    container_name: sf4_maildev
    ports:
      - 8001:80

Symfony .env:

DATABASE_URL=mysql://root:[email protected]:3306/sf4

Мне нужно перенастроить мой файл Doctrine? В настоящее время это значение по умолчанию:

doctrine:
dbal:
    # configure these for your database server
    driver: 'pdo_mysql'
    server_version: '5.7'
    charset: utf8mb4
    default_table_options:
        charset: utf8mb4
        collate: utf8mb4_unicode_ci

    url: '%env(resolve:DATABASE_URL)%'

Ошибка:

Исключение в драйвере: не удалось найти драйвер

И, как я уже сказал, я могу подключиться к БД через phpMyAdmin, используя учетные данные root @ root.

Это переменная $ this-> params из файла Connection.php непосредственно перед подключением к БД:

 ["driver"]=>
  string(9) "pdo_mysql"
  ["charset"]=>
  string(7) "utf8mb4"
  ["url"]=>
  string(32) "mysql://root:[email protected]:3306/sf4"
  ["host"]=>
  string(5) "mysql"
  ["port"]=>
  string(4) "3306"
  ["user"]=>
  string(4) "root"
  ["password"]=>
  string(4) "root"
  ["driverOptions"]=>
  array(0) {
  }
  ["serverVersion"]=>
  string(6) "8.0.15"
  ["defaultTableOptions"]=>
  array(2) {
    ["charset"]=>
    string(7) "utf8mb4"
    ["collate"]=>
    string(18) "utf8mb4_unicode_ci"
  }
  ["dbname"]=>
  string(3) "sf4"

См. также:  Шаблон фабрики приложений WSGI и время импорта созданных объектов уровня модуля
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. The50

    Попробуй это :

    doctrine:
        dbal:
            # configure these for your database server
            driver: 'pdo_mysql'
            server_version: '8.0.15'
            charset: utf8mb4
            default_table_options:
                charset: utf8mb4
                collate: utf8mb4_unicode_ci
    
            url: '%env(resolve:DATABASE_URL)%'
    

    Образ mysql — это последняя версия mysql.

    В образе php отсутствует драйвер pdo_mysql

    он должен быть добавлен в Dockerfile следующим образом:

    RUN docker-php-ext-install pdo pdo_mysql zip
    

    После этого образ нужно перестроить командой:

    docker-compose build
    

    Пробовал менять, все равно. Также я попытался сбросить переменную $ this- ›params в файл Connection.php непосредственно перед подключением к БД. Я обновил свой пост выводом. person The50; 07.04.2019

    кажется, что драйвер mysql не установлен в вашем php контейнере, содержит ли ваш Dockerfile эту строку RUN docker-php-ext-install pdo pdo_mysql zip? person The50; 07.04.2019

    Нет, у меня этого не было. Я поместил его в свой файл .docker / php / Dockerfile. Как узнать, что он действительно установлен? Ошибка по-прежнему сохраняется. person The50; 07.04.2019

    вы можете запустить php -m внутри своего php-контейнера и посмотреть, есть ли pdo_mysql в списке, перестроили ли вы изображения после изменения? person The50; 07.04.2019

    Ага, pdo_mysql пока нет. Достаточно ли запустить compose-down — ›compose-up, чтобы загрузить? person The50; 07.04.2019

    используйте docker-compose build перед docker-compose up -d, это должно перестроить слои вашего изображения. person The50; 07.04.2019

  2. The50

    juste замените mysql на sf4_mysql, потому что вы должны применить имя контейнера (имя_контейнера: sf4_mysql) на вашем хосте ==>

    DATABASE_URL = mysql: // корень: корень @ mysql: 3306 / sf4 по DATABASE_URL = mysql: // корень: корень @ sf4_mysql: 3306 / sf4

    Это решает проблему, но тогда команда bin / console make: migration больше не работает. person The50; 19.12.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: