Symfony, Docker container fpm, apache: не удалось найти драйвер [doctrine:database:create]

Я пытаюсь создать проект symfony 5.4, используя докер с контейнером для apache, php fpm, symfony, mysql db. но на самом деле мне не удалось создать свою базу данных, я получаю эту ошибку:

In AbstractMySQLDriver.php line 128:
                                                          
  An exception occurred in driver: could not find driver  
                                                          

In Exception.php line 18:
                         
  could not find driver  
                         

In PDOConnection.php line 40:
                         
  could not find driver  

конфиг этой доктрины: config/packages/doctrine.yaml:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        
        # IMPORTANT: You MUST configure your server version,
        # either here or in the DATABASE_URL env var (see .env file)
        #server_version: '13'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

это расширения активированы:

;extension=bz2
extension=curl
;extension=ffi
;extension=ftp
;extension=fileinfo
extension=gd2
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=ldap
extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop

; The MIBS data available in the PHP distribution must be installed.
; See http://www.php.net/manual/en/snmp.installation.php
;extension=snmp

;extension=soap
extension=sockets
;extension=sodium
extension=sqlite3
;extension=tidy
;extension=xmlrpc

этот мой файл стека Docker-compose:

version: '3.8'

services:
   myApp-back-apache:
    image: localhost:5000/apache
    working_dir: /var/www
    volumes:
      - type: bind
        source: myApp-back
        target: /var/www
     
    ports:
      - 8081:80
    environment:
      HTTPD_FPM_HOST: myApp-back-fpm
      HTTPD_FPM_PORT: 9000

  myApp-back-fpm:
    image: php:7.4-fpm
    working_dir: /var/www/html
    volumes:
      - type: bind
        source: myApp-back
        target: /var/www/html
  
  myApp-back-db:
    image: "mariadb:10.6.5"
    environment:  
      MYSQL_ROOT_USER: root
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: root
    volumes:
      - myApp-back-db:/var/lib/mysql
    ports:
      - "3309:3306"

volumes:
  myApp-back-db:
    external: true

и мой файл .env:

DATABASE_URL="mysql://root:root@127.0.0.1:3309/db_name?serverVersion=5.7&charset=utf8mb4"

В файле docker-compose.yml имя базы данных — root, а в файле .env имя базы данных — db_name.

Tpojka 09.04.2022 16:38

Я не думаю, что это проблема. Я такой же давал не раньше и он такой же. Я думаю, что это проблема с несколькими файлами ini, но я не могу найти другой файл .ini в контейнере fpm.

Sodiki 09.04.2022 16:54

Это расширения сервера apach для php

Sodiki 09.04.2022 17:47
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
0
3
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вы уверены, что используете php -m в докер-контейнере, а не на хосте? (довольно распространенная ошибка)

  2. В вашем док-контейнере symfony(fpm) 127.0.0.1 и localhost разрешаются в сам контейнер, а не в ваш хост-компьютер, на котором открыт доступ к базе данных через порт 3309. Попробуйте изменить DATABASE_URL на mysql://root:root@myApp-back-db:3306. Кроме того, вы можете попробовать установить URL-адрес на host.docker.internal, если вы используете Mac или Windows.

  3. Создайте файл докера для fpm и установите расширение mysql:

докер-композитор:

myApp-back-fpm:
    build:
        context: .
    working_dir: /var/www/html
    volumes:
      - type: bind
        source: myApp-back
        target: /var/www/html

Докерфайл:

FROM php:7.4-fpm

RUN docker-php-ext-install pdo pdo_mysql;

Я уже пробовал это, но у меня все еще та же проблема, я также напрямую подключился к контейнеру fpm, чтобы запустить доктрину: создать, но у меня та же проблема. У меня также есть это сообщение в дополнение к проблеме с драйвером: 2022-04-09T15:29:03+00:00 [информация] Устаревший пользователь: метод "PDO::exec()" может добавить "int|false" в качестве собственного возврата объявление типа в будущем. Сделайте то же самое в дочернем классе «Doctrine\DBAL\Driver\PDOConnection», чтобы избежать ошибок, или добавьте явную аннотацию @return, чтобы удалить это сообщение.

Sodiki 09.04.2022 17:31

Вы бегали php -m в docker-compose exec myApp-back-fpm /bin/sh? Сообщение об ошибке, которое вы опубликовали сейчас, отличается от того, что было раньше, и, насколько я могу судить, не является фатальной ошибкой.

Ali Rahimi 09.04.2022 17:33

Я получаю это: root@f3692a82ba4b:~# php -m [Модули PHP] Core ctype curl date dom fileinfo filter ftp hash iconv json libxml mbstring mysqlnd openssl pcre PDO pdo_sqlite Phar posix readline Сеанс отражения SimpleXML натрия SPL sqlite3 стандартный токенизатор xml xmlreader xmlwriter zlib [Зенд-модули]

Sodiki 09.04.2022 17:39

Таким образом, у вас не установлен pdo_mysql в контейнере fpm. опубликуйте Dockerfile для вашего контейнера fpm, чтобы мы могли помочь

Ali Rahimi 09.04.2022 17:41

мой контейнер fpm основан на образе php:7.4-fpm, поэтому я не использую dockerFile: myApp-back-fpm: image: php:7.4-fpm working_dir: /var/www/html volumes: - type: bind source: Цель myApp-back: /var/www/html

Sodiki 09.04.2022 17:43

однако я активировал расширение: /usr/local/etc/php/php.ini-development

Sodiki 09.04.2022 17:45

Да, пропустил это, можете ли вы использовать файл докеров, который я разместил в своем ответе?

Ali Rahimi 09.04.2022 17:54

Другие вопросы по теме