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"
Попробуй это :
Образ mysql — это последняя версия mysql.
В образе php отсутствует драйвер
pdo_mysql
он должен быть добавлен в Dockerfile следующим образом:
После этого образ нужно перестроить командой:
Пробовал менять, все равно. Также я попытался сбросить переменную $ 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.2019juste замените 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