Я пытаюсь создать проект 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"
Я не думаю, что это проблема. Я такой же давал не раньше и он такой же. Я думаю, что это проблема с несколькими файлами ini, но я не могу найти другой файл .ini в контейнере fpm.
Это расширения сервера apach для php
Вы уверены, что используете php -m
в докер-контейнере, а не на хосте? (довольно распространенная ошибка)
В вашем док-контейнере symfony(fpm) 127.0.0.1
и localhost
разрешаются в сам контейнер, а не в ваш хост-компьютер, на котором открыт доступ к базе данных через порт 3309. Попробуйте изменить DATABASE_URL
на mysql://root:root@myApp-back-db:3306
.
Кроме того, вы можете попробовать установить URL-адрес на host.docker.internal
, если вы используете Mac или Windows.
Создайте файл докера для 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, чтобы удалить это сообщение.
Вы бегали php -m
в docker-compose exec myApp-back-fpm /bin/sh
? Сообщение об ошибке, которое вы опубликовали сейчас, отличается от того, что было раньше, и, насколько я могу судить, не является фатальной ошибкой.
Я получаю это: 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 [Зенд-модули]
Таким образом, у вас не установлен pdo_mysql в контейнере fpm. опубликуйте Dockerfile для вашего контейнера fpm, чтобы мы могли помочь
мой контейнер 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
однако я активировал расширение: /usr/local/etc/php/php.ini-development
Да, пропустил это, можете ли вы использовать файл докеров, который я разместил в своем ответе?
В файле
docker-compose.yml
имя базы данных —root
, а в файле.env
имя базы данных —db_name
.